C 學習 二 類和物件 1

2021-09-23 18:31:44 字數 2007 閱讀 2411

class/struct classname

;

class為定義類的關鍵字,classname為類的名字,{}中為類的主體,注意類定義結束時後面分號。

類中的元素稱為類的成員:類中的資料稱為類的屬性或者成員變數; 類中的函式稱為類的方法或者成員函式

c++中struct和class的區別是什麼?

c++需要相容c語言,所以c++中struct可以當成結構體去使用。另外c++中struct還可以用來定義類。

和class是定義類是一樣的,區別是struct的成員預設訪問方式是public,class是struct的成員預設訪問方式

是private

類中既可以有成員變數又可以有成員函式,那麼乙個類的物件中包含了什麼?如何計算乙個類的大小?

// 類中既有成員變數,又有成員函式

class a1

private:

int _a;

};// 類中僅有成員函式

class a2

};// 類中什麼都沒有---空類

class a3

{};cout << sizeof(a1) << endl; // 4

cout << sizeof(a2) << endl; // 1

cout << sizeof(a3) << endl; // 1

結論:乙個類的大小,實際就是該類中」成員變數」之和,當然也要進行記憶體對齊,注意空類的大小,空模擬

較特殊,編譯器給了空類乙個位元組來唯一標識這個類

記憶體對齊規則:

1. 第乙個成員在與結構體偏移量為0的位址處。

2. 其他成員變數要對齊到某個數字(對齊數)的整數倍的位址處。

vs中預設的對齊數為8,gcc中的對齊數為4

3. 結構體總大小為:最大對齊數(所有變數型別最大者與預設對齊引數取最小)的整數倍

class a 

void printa()

private:

int _a;

};a a1(8);

a a2(7);

a1.printa();

a2.printa();

通過a類構造的兩個物件a1, a2, 分別呼叫printa() 方法, 輸出不同的值

這是因為c++有this指標: c++編譯器給每個「成員函式「增加了乙個隱藏的指標引數,讓該指

針指向當前物件(函式執行時呼叫該函式的物件),在函式體中所有成員變數的操作,都是通過該指標去訪

問。只不過所有的操作對使用者是透明的,即使用者不需要來傳遞,編譯器自動完成

相當於 定義printa時 函式簽名為: void printa(a* const this){}

呼叫時, 編譯器自動處理為  a1.printa(&a1)      a2.printa(&a2)

this指標的特性:

1. this指標的型別:類型別* const

2. 只能在「成員函式」的內部使用

3. this指標本質上其實是乙個成員函式的形參,是物件呼叫成員函式時,將物件位址作為實參傳遞給this

形參。所以物件中不儲存this指標。this指標存在棧上

4. this指標是成員函式第乙個隱含的指標形參,一般情況由編譯器通過ecx暫存器自動傳遞,不需要使用者

傳遞

C 學習筆記(二)類和物件基礎

成員函式 注意 兩個冒號 int car size 函式size是car類的成員函式,只能通過物件 物件指標 物件引用才能呼叫。private 私有成員 public 公有成員 protected 保護成員 1 類成員函式的內部可訪問 當前物件和同類其他物件的全部屬性,函式。2 類的成員函式以外可訪...

C 學習筆記 二 類與物件

四.建立物件的2種方式 類由函式成員和資料成員組成,資料成員一般宣告為私有,私有和保護成員不能通過物件直接訪問。但是可以通過函式成員對私有資料成員進行操縱。訪問限定符 access specifier 有三種 例子 includeusing namespace std class cgoods ma...

python基礎學習筆記(二)類和物件

class bird object def init self,sound magic mehod 前後兩個下劃線 如 add self.sound sound dict print init sound sound def chirp self self 該函式可在同一類中被呼叫 print bi...