c 物件揭秘

2021-09-27 06:53:33 字數 1324 閱讀 1827

物件的大小

常規​ 初學c++的時候,我們經常對類實際的大小感到困惑,當類中即有成員和函式的時候,這個類的大小到底是多大呢?我們可以使用sizeof來檢視

​ 類物件的大小。

#include#includeusing namespace std;

class b

};int main()

​ 這個類的大小輸出是4,那麼由此我們可以知道類中的函式是不佔類的大小的。

特殊​ 那麼有一下幾種特殊情況,我們思考類的大小是多少呢?

#include#includeusing namespace std;

//空結構體a大小是1

typedef struct a;

//空類b的大小是1

class b;

//有乙個函式的類的大小是1

typedef struct c

}; int main()

​ 我們發現這三種情況類的大小都是1,對於編譯器而言,只是給了乙個佔位符。

this指標

​ 在學習c++的類或者結構體的時候,我們發現存在乙個this指標,可以通過this指標來訪問類物件中的成員以及函式,那麼this指標到底是什麼呢?

建構函式

​ 建構函式是編譯器幫我們自動呼叫的,在生成新的類物件的時候。

​ 建構函式作用:

​ 建構函式特點:

析構函式

​ 析構函式是編譯器幫我們自動呼叫的,在類銷毀的時候。

​ 析構函式的作用

raii

​ raii 是c++管理資源的方式,是依賴建構函式和析構函式來實現的。

繼承的本質

繼承的本質是資料的拷貝。

我們都知道 子類繼承父類,生成子類物件的時候,編譯器會幫我們呼叫父類的建構函式來生成父類,實際上編譯器幫我們做的事情是把父類的資料拷貝到子類資料存放的前面,並且生成this指標。

實際上子類的成員和父類的成員是放在一起的,因此在子類中都可以通過this指標偏移來訪問到。

我們都知道子類物件付給父類指標的時候,父類沒辦法訪問到子類的成員,但是由於資料是排列在一起的原因,我們可以欺騙編譯器訪問到資料

這個是不安全的,只是想證明子類繼承父類,那麼子類物件的資料和父類物件的資料其實是放在一起的。

函式返回物件的小揭秘

下面是一段c 你能知道執行的結果嗎?includeusing namespace std class cpp obj cpp obj const cpp obj c cpp obj operator const cpp obj rhs cpp obj cpp obj return test int ...

C 之引用揭秘

測試 第二條彙編指令將8這個值儲存到變數a在棧中的空間。第三條指令將變數a的位址放到暫存器eax中。可以看到,eax的值為0x29fefc,這個位址為虛擬位址空間的位址。游標處彙編指令將該值壓入棧中,作為呼叫函式fun 的引數 順表提一下,為什麼指標總是4位元組大小,32位機器,記憶體最大4g,32...

C 揭秘rand 函式

相信只要是程式猿都會知道rand 函式是用來取隨機數的乙個庫函式,但是它出的結果真的是一組隨機數嗎?我們來看看這段 執行的結果 1 include2 include3 int main void 4 10 linux下gcc每次執行結果如下 windows vc6.0每次執行結果如下 本人windo...