關於C 物件模型的一點理解(2)

2022-08-30 23:33:38 字數 1187 閱讀 8155

先帖段**,再慢慢分析吧

//

//#include

"stdafx.h

"#include

struct

a;//

預設建構函式

a(int v);//

過載建構函式

a(const a&);//

拷貝或複製建構函式

a& operator=(const a &)

~a()

};struct

x a a;

~x();

};int

main()

輸出結果為下圖

下面具體分析下c++都做了什麼。。。

**執行到x slow(int(2))的時候,當執行到x(int v),首先執行初始化列表,然後在執行函式體之前初始化成員變數,當然這裡的初始化列表沒有內容,所以沒有執行什麼,然後此時會先初始化該類的成員變數,也就是a a,於是會列印第乙個a(),接下來進入x的建構函式體,執行a=v,由於v是int型別,此時c++編譯器會做隱式型別轉換,通過a(int)建構函式構造出乙個臨時物件,用v進行初始化,所以會列印第二句a(int),接下來才會執行賦值運算子,列印第三句operator=(a&),當來到x(int)的函式體尾部,這個臨時物件會被析構,於是列印了第四句~a(),析構時會按照建構函式的逆序先執行~x()函式,然後再析構成員變數,於是分別列印出~x(),~a()。

於是整個流程大致為:x(int)   --->   初始化列表   -->    成員變數   -->   x(int)函式體   -->   建立臨時物件a(int),a.operator=(),~a()  -->  按逆序析構

作為成員變數與繼承的對比,下面再帖一段相似的繼承的例子

struct x2:public

a a a;

~x2();

};int

main()

此時輸出結果如下

列印的結果與上述相比,僅僅在上述的結果首尾多了個a()和~a()。這是因為基類的初始化是在初始化列表之前,析構也是在最後.

關於物件導向的一點理解

1.我渡過了快5天的學習終於對物件導向有一點眉目了。2.關於學習物件導向其實還是要多實踐,這樣才能有收穫。先要自己做,然後在對比老師的我們和他有什麼差距,做得不足。當你不能理解的時候需要多練習,有的同學不知道怎麼下手,總覺得這裡不知道怎麼做,那裡不知道怎麼做。其實都是沒有實踐的結果。3.這裡還是舉乙...

關於malloc的一點理解

在函式中使用malloc,如果是大的記憶體分配,而且malloc與free的次數也不是特別頻繁,使用malloc與free是比較合適的,但是如果記憶體分配比較小,而且次數特別頻繁,那麼使用malloc與free就有些不太合適了。因為過多的malloc與free容易造成記憶體碎片,致使可使用的堆記憶體...

關於HTTPS的一點理解

通訊使用明文 不加密 內容可能會被竊聽。不驗證通訊方的身份,因此有可能遭遇偽裝。無法證明報文的完整性,所以有可能已經遭到篡改。https http 認證 加密 完整性保護 https是與ssl 安全套接層 組合使用的http協議 http secure 使用ssl之後,請求則變成先和ssl通訊,ss...