先帖段**,再慢慢分析吧
//輸出結果為下圖//#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...