c++的自定義類中有六個預設的函式,即如果使用者沒有顯式定義這些函式時,c++編譯器會類中生成這些函式的預設形式。除了大家所熟知的建構函式、拷貝建構函式、賦值函式和析構函式外,c++為自定義類 還提供了兩個容易被人忽視的預設函式——取位址函式和對常物件的取位址函式。
由上面的例子可知,c++允許通過取位址運算子&求得物件在記憶體中的位址,而這個功能就是依靠類中的取位址函式實現的。和賦值函式相似,類中的取位址函式是通過對取位址運算子&進行過載來實現的,如果使用者在編寫類時沒有顯式地定義類的取位址函式,那麼c++編譯器將會在類中生成乙個預設的取位址函式。
通過上面的例子我們發現,在對常物件stu進行取位址操作時,物件並沒有呼叫類中的取位址函式,這是因為類中還有乙個預設的函式,其功能是對常物件進行取位址操作。和取位址函式相同,對常物件的取位址函式也是通過對取位址運算子&過載來實現的,同樣如果使用者在編寫類時沒有顯式地定義類的對常物件的取位址函式,那麼c++編譯器將會在類中生成乙個預設的對常物件的取位址函式:
1 #include2 #include特別注意:兩個const的作用• 第乙個const要求函式返回的指標是常量,如果返回的是非常量則報錯3using
namespace
std;
4class
student
9 student(string name,int
age):name(name),age(age)
12 student(const student&stu)
17 student& operator=(const student&stu)
23return *this;24
}25 student* operator&()
36private:37
string
name;
38int
age;
39};
40int
main()
• 第二個const修飾this指標,使該物件的this指標是乙個指標常量,從而能夠被該函式成功返回。
C 位元組對齊容易被忽略的兩個問題
關於結構體位元組對齊的金科玉律在網上隨便就能查得到,我就不贅述了。在這裡就分享兩條開發中曾經忽略的問題 先看 pragma pack 4 struct com char chtest1 char chtest2 pragma pack sizeof struct com gcc 4.1 和 vc 2...
C 中類的6個預設函式
類的6個預設的成員函式包括 建構函式 析構函式 拷貝建構函式 賦值運算子過載函式 取位址操作符過載 const修飾的取位址操作符過載。以下詳細介紹前四個函式。一 建構函式 cgoods 例項化乙個物件 1 分配物件記憶體空間 2 呼叫物件的建構函式 初始化 定義的同時賦值。賦值 定義後,再賦值。建構...
C 中兩個類互相引用
一 問題描述 現在有兩個類a和b需要定義,定義a的時候需要用到b,定義b的時候需要用到a。二 分析 a和b的定義和呼叫都放在乙個檔案中肯定是不可以的,這樣就會造成兩個迴圈呼叫的死迴圈。根本原因是 定義a的時候,a的裡面有b,所以就需要去檢視b的佔空間大小,但是檢視的時候又發現需要知道a的佔空間大小,...