C 中的類與this指標

2021-10-06 10:13:42 字數 2174 閱讀 8457

c++ struct:可以定義資料以及函式,一般使用class

struct student

void

setid

(int id)

char name[10]

;int _id;};

class

student

void

setid

(int id)

private:/

/私有的成員在類外不可見

//成員變數,屬性

char name[10]

;int _id;

protected:/

/保護的成員在類外不可見

char major[10]

;};

訪問限定符:public,protected, private

限定符表示範圍,從當前限定符開始,到下乙個限定符結束,只限制成員在類外的訪問,類內訪問不受限制

class 定義成員預設訪問許可權為私有

struct 定義的成員預設訪問許可權是共有

建議顯式的寫出來,以增加可讀性

類的封裝:將資料和運算元據的方法有機結合,隱藏屬性和實現的細節,僅對外公開介面來和物件進行互動

​ 類定義了乙個新的作用域,所有類的成員都在類的作用域中。在類體外定義成員,需要使用::作為域解析符,指明成員屬於哪個類域

​ 變數:物件 ---->自定義型別的變數一般習慣稱為物件

類只是乙個模型一樣的東西,限定了類有哪些成員,定義乙個沒有分配實際的記憶體空間來儲存它

乙個類可以例項化多個物件,例項化出的物件,占用實際的物理空間,儲存類成員變數

class

a//4位元組

;class

b//4位元組};

class

c//1位元組};

class

d//1位元組

;

物件模型中只存放普通的成員變數,不存放成員函式,成員函式存放在公共**段

空類佔乙個位元組(起到標記作用)

類的大小遵循記憶體對齊規則

第乙個成員在與結構體偏移量為0的位址處。其他成員變數要對齊到某個數字(對齊數)的整數倍位址處。(對齊數 = 編譯器預設對齊數與該成員大小的較小值,vs預設為 8 ,linux和當前欄位sizeof值一樣)

結構體總大小為:最大對齊數(所有變數型別的最大者與預設對齊數取最小)的整數倍。如果存在巢狀,巢狀的結構體對齊到自己的最大對齊數的整數倍處,結構體的整體大小就是所有最大對齊數(含巢狀結構體的對齊數)的整數倍處。

!!!!如果巢狀的結構體只有定義,那麼算大小的時候不算它!!!!!

class

a//48 位元組

; b b;

//關鍵點};

class

a//24位元組;}

;

為什麼要記憶體對齊?

答:提高訪問效率,cpu讀取記憶體是按塊讀取的,記憶體對齊可以提高訪問效率,方便一些硬體(如嵌入式)讀取資料

如何修改記憶體對齊數:#pargma pack()

c++編譯器給每個「非靜態的成員函式「增加了乙個隱藏的指標引數,讓該指標指向當前物件(函式執行時呼叫該函式的物件),在函式體中所有成員變數的操作,都是通過該 指標去訪問。只不過所有的操作對使用者是透明的,即使用者不需要來傳遞,編譯器自動完成。

this 指標型別:類型別* const

this指標只存在於成員函式中

this指標始終作為成員函式的第乙個行參

this不是類的成員,只是乙個函式行參,一般存在於棧上,一般會做優化,存在暫存器中

有解引用的情況下this指標不能為空!

C 類中的this指標

1.this指標的用處 乙個物件的this指標並不是物件本身的一部分,不會影響sizeof 物件 的結果。this作用域是在類內部,當在類的非靜態成員函式中訪問類的非靜態成員的時候,編譯器會自動將物件本身的位址作為乙個隱含引數傳遞給函式。也就是說,即使你沒有寫上this指標,編譯器在編譯的時候也是加...

C 類中的指標

當我們在堆記憶體例項化物件時,可以得到物件指標 下面為堆記憶體例項化物件的例項以及如何通過物件指標訪問物件中的成員 classa a int x void show intmain 以物件的指標作為乙個物件中的資料成員。例子 classa a void show private int a int ...

C 類中的指標

c this指標 在c 中,每乙個物件都能通過this指標來訪問自己的位址。this指標是所有成員變數的隱含引數。在函式內部,this指標可以用來指向呼叫物件。注意 友元函式沒有this指標,友元不是類的成員,只有成員函式才有this指標 include using namespace std cl...