C 之類的成員函式的原理

2021-07-13 20:23:52 字數 629 閱讀 7664

先來乙個類的成員函式的例子:

#includeusing namespace std;

class mytime

void display()

};int main()

為什麼類中的成員函式不占用物件空間呢,正式因為類中的成員函式其實就是全域性函式或者說是該命名空間中的全域性函式,只不過把他放到了類中而已,他的本質轉換成c語言的結構體是這樣的:

#include

using

namespace

std;

struct mytime ;

void settime(struct mytime* mt, int h, int m, int s)

void display(struct mytime* mt)

int main()

可以看到用c語言的結構體來實現,函式就是全域性函式,只不過在函式中多了乙個引數struct mytime* mt,實際上c++中的類成員函式中也是有這麼乙個引數的,只不過被隱藏了,這個被隱藏的就是this指標。兩個列印出的結果都是:

理解了類成員函式的原理,就自然明白了為什麼類成員並不占用物件空間。

C 之類的靜態成員

類的靜態成員 用關鍵字static宣告 為該類的所有物件共享,靜態資料成員具有靜態生存期。必須在類外定義和初始化,用 來指明所屬的類。include using namespace std class point point point p point intgetx intgety void sh...

C 系列之類的靜態成員

靜態成員函式中不能呼叫非靜態成員,非靜態成員函式中可以呼叫靜態成員,因為靜態成員在編譯時已經存在,先於物件而存在,因而無法使用物件的成員函式 靜態成員變數使用前必須先初始化,否則會在linker時出錯 靜態成員的特性 不管這個類建立了多少個物件,而其靜態成員只有乙個拷貝 副本 這個拷貝被所有屬於這個...

C 之類成員指標

需要用到 和 兩個操作符了。其實這兩個操作符也沒啥新奇的。和 分別為物件和物件指標的成員訪問操作符,而 則為解引用操作符。當寫下 ac.ipm 時,其實就是請求將 ac的位址加上ipm所表示的偏移量,然後訪問該 ac 所表示的物件中的特定資料成員。當寫下 pc ipm 時,其實就是pc所指向的位址加...