類 構造 析構函數 調用順序/ 複製(拷貝)構造&&賦值函數

ref http://www.cnblogs.com/findumars/p/5804860.html

(1)C++ 類的靜態成員詳細講解 http://blog.csdn.net/morewindows/article/details/6721430

一、先執行內部靜態對象的構造方法,如果有多個按定義的先後順序執行;靜態對象在構造的時候也是也先執行其內部的靜態對象。

二、再調用父類的構造方法(父類還有父類的話,從最開始的基類開始調用),如果沒有明顯指定調用父類自定義的構造方法,那麼編譯器會調用默認的父類構造方法super()。但是如果要調用父類自定義的構造方法,要在子類的構造方法中明確指定。

三、按聲明順序將成員引用對象變量初始化。

四、最後調用自身的構造方法。

  • 淺談構造函數與析構函數的調用順序
    http://blog.csdn.net/bresponse/article/details/6914155
    構造函數的調用順序總是如下:
    1.基類構造函數。如果有多個基類,則構造函數的調用順序是某類在類派生表中出現的順序,而不是它們在成員初始化表中的順序。
    2.成員類對象構造函數。如果有多個成員類對象則構造函數的調用順序是對象在類中被聲明的順序,而不是它們出現在成員初始化表中的順序。
    3.派生類構造函數。

析構函數
析構函數的調用順序與構造函數的調用順序正好相反,將上面3個點反過來用就可以了,首先調用派生類的析構函數;其次再調用成員類對象的析構函數;最後調用基類的析構函數。
析構函數在下邊3種情況時被調用:
1.對象生命週期結束,被銷燬時(一般類成員的指針變量與引用都i不自動調用析構函數);
2.delete指向對象的指針時,或delete指向對象的基類類型指針,而其基類虛構函數是虛函數時;
3.對象i是對象o的成員,o的析構函數被調用時,對象i的析構函數也被調用。

  • C++中多重繼承構造函數執行順序
    多重繼承與單繼承類似,也是先執行基類構造函數。多個基類之間,則按照派生類聲明時從左到右執行。
    執行順序:基類構造函數->初始化成員變量->派生類構造函數

(2)C++複製(拷貝)構造函數和賦值符的區別
http://blog.csdn.net/randyjiawenjie/article/details/6666937
1.從概念上區分:
複製構造函數是構造函數,而賦值操作符屬於操作符重載範疇,它通常是類的成員函數
2.從原型上來區分:
複製構造函數原型ClassType(const ClassType &);無返回值
賦值操作符原型ClassType& operator=(const ClassType &);返回值爲ClassType的引用,便於連續賦值操作
3.從使用的場合來區分:
複製構造函數用於產生對象,它用於以下幾個地方:函數參數爲類的值類型時、函數返回值爲類類型時以及初始化語句,例如(示例了初始化語句,函數參數與函數返回值爲類的值類型時較簡單,這裏沒給出示例)
ClassType a; //
ClassType b(a); //調用複製構造函數
ClassType c = a; //調用複製構造函數
而賦值操作符要求‘=’的左右對象均已存在,它的作用就是把‘=’右邊的對象的值賦給左邊的對象
ClassType e;
Class Type f;
f = e; //調用賦值操作符
4.當類中含有指針成員時,兩者的意義有很大區別
複製構造函數需爲指針變量分配內存空間,並將實參的值拷貝到其中;而賦值操作符它實現的功能僅僅是將‘=’號右邊的值拷貝至左值,在左邊對象內存不足時,先釋放然後再申請。當然賦值操作符必須檢測是否是自身賦值,若是則直接返回當前對象的引用而不進行賦值操作

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章