【C++】類和物件(2)
阿新 • • 發佈:2019-01-13
一、類的作用域
類定義了一個新的作用域,類的所有成員都在類的作用域中。在類體外定義成員,需要使用 :: 作用域解析符
指明成員屬於哪個類域。否則找不到。
class person { public: void PrintfPersonInfo(); private: char _name[20]; char _gender[3]; int _age; }; //這裡需要指定PrintfPersonInfo是屬於person這個類域 void person::PrintfPersonInfo() { cout << _name<<" " _gender <<" " _age << endl; }
二、類的例項化
用類型別建立物件的過程,稱為類的例項化
1. 類只是一個模型一樣的東西,限定了類有哪些成員,定義出一個類並沒有分配實際的記憶體空間來儲存它
2. 一個類可以例項化出多個物件,例項化出的物件 佔用實際的物理空間,儲存類成員變數
3. 做個比方。類例項化出物件就像現實中使用建築設計圖建造出房子,類就像是設計圖,只設計出需要什
麼東西,但是並沒有實體的建築存在,同樣類也只是一個設計,例項化出的物件才能實際儲存資料,佔用物理空間
三、如何計算類物件的大小
class A { public: void PrintA() { cout << _a << endl; } private: char _a; }; int main() { cout << sizeof(A) << endl; system("pause"); return 0; }
類中既可以有成員變數,又可以有成員函式,那麼上面這個A的大小是多少呢?
這是怎麼計算出來的呢?
一個類的大小,實際就是該類中”成員變數”之和,當然也要進行記憶體對齊,注意空類的大小,空類比
較特殊,編譯器分配給了空類一個位元組來唯一標識這個類,佔位,表示物件存在過。
在這裡順便複習一下結構體記憶體對齊的規則:
1. 第一個成員在與結構體偏移量為0的地址處。
2. 其他成員變數要對齊到某個數字(對齊數)的整數倍的地址處。
注意:對齊數 = 編譯器預設的一個對齊數 與 該成員大小的較小值。
VS中預設的對齊數為8,gcc中的對齊數為4
3. 結構體總大小為:最大對齊數(所有變數型別最大者與預設對齊引數取最小)的整數倍。
4. 如果嵌套了結構體的情況,巢狀的結構體對齊到自己的最大對齊數的整數倍處,結構體的整體大小就是
所有最大對齊數(含巢狀結構體的對齊數)的整數倍。