C 類和物件

2021-09-10 01:48:15 字數 1555 閱讀 9776

c語言中,結構體中只能定義變數,在c++中,結構體內不僅可以定義變數,也可以定義函式。

struct student

void printstudentinfo()

private:

int _a;

double _b;

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

class a2

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

class a3

{};int main()

類物件的儲存方式猜測

(1)物件中包含類的各個成員

缺陷:每個物件中成員變數是不同的,但是呼叫同乙份函式,如果按照此種方式儲存,當乙個類建立多個物件時,每個物件中都會儲存乙份**,相同**儲存多次,浪費空間。

(2)只儲存成員變數,成員函式存放在公共的**段

結論:乙個類的大小,實際就是該類中」成員變數」之和,當然也要進行記憶體對齊,注意空類的大小,空模擬較特殊,編譯器給了空類乙個位元組來唯一標識這個類。

結構體內存對齊規則

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

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

注意:對齊數 = 編譯器預設的乙個對齊數 與 該成員大小的較小值。

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

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

(4)如果巢狀了結構體的情況,巢狀的結構體對齊到自己的最大對齊數的整數倍處,結構體的整體大小就是所有最大對齊數(含巢狀結構體的對齊數)的整數倍。

【問題:】

結構體怎麼對齊? 為什麼要進行記憶體對齊

如何讓結構體按照指定的對齊引數進行對齊

如何知道結構體中某個成員相對於結構體起始位置的偏移量

什麼是大小端?如何測試某台機器是大端還是小端,有沒有遇到過要考慮大小端的場景

this指標的引出

#include using namespace std;

class date

void init(int year, int month, int day)

private:

int _year;

int _month;

int _day;

};int main()

this指標的特性

(1)this指標的型別:類的型別* const

(2)只能在「成員函式」的內部使用。

(3)this指標本質上其實是乙個成員函式的形參,是物件呼叫成員函式時,將物件位址作為實參傳遞給this形參。所以物件中不儲存this指標。

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

【問題】

this指標存在**?

this指標可以為空嗎?

C 類和物件 類和物件

c 中物件的型別稱為類,類代表了某一批物件的共性和特徵,類是物件的抽象,而物件是類的具體例項,類是抽象的,不占用記憶體,而物件是具體的,占用 儲存空間,這點很重要,讀者需要牢記。類是使用者自己指定的型別,如果程式中要用到類型別,必須自己根據需要進行宣告,或者使用別人已設計好的類,c 標準本身並不提供...

C 物件和類

1,特殊的類 字串string include include using namespace std int main 類似於標準庫函式,我們不需要記住每種 類 的全部操作,只需要在使用過程中記住一些常用的操作就可以了。如果有需要的話,可以求助於相關書籍或網路 2,當我們對string進行種種操作...

C (類和物件)

類成員函式 類的成員函式指標那些把定義和原型寫在類定義內部的函式,就想類定義中的其他變數一樣。類訪問修飾符 類成員可以定義為public,private或protected。預設情況下是定義為private。建構函式 類的建構函式是一種特殊的函式,在建立乙個新物件是呼叫。析構函式 類的析構函式也是一...