理解C++存在繼承和組合的物件建構函數調用順序__Jquery

來源:互聯網
上載者:User

前言:
Hello,全世界早上好啊,哈哈,9月你好,2015年9月的第一天,也是自己本科生涯的最後一年了,接下來就是校招走上自己的職場,昨天是大四的第一節課,上的是軟體工程,挺喜歡的一門課,要好好體會一下其中的思想,哈哈,扯遠了,往下的日子裡,更要好好努力,今天以一道面試題為說起,理解或者說感受類中關於建構函式的調用順序問題:
Let’s show the code:

#include <iostream>using namespace std;class A {public:    A() {cout << "A" ;}    ~A() {cout << "~A" ;}};class B {public:    B() {cout << "B" ;}    ~B() {cout << "~B";}private:    A a;};class C : public A {public:    C() {cout << "C" ;}    ~C() {cout << "~C";}private:    B b;    A a;};int main() {    cout << "=======================================\n";    cout << "A類對象的構造過程: ";    A a;    cout << "\n======================================\n\n";    cout  << "B類對象的構造過程: " ;    B b;    cout << "\n=======================================\n\n";    cout << "C類對象的構造過程: ";    C *p = new C();  // 動態申請的記憶體別忘了釋放,否則不會調用解構函式,任何時候delete null 指標也不會錯    delete p;     // 注意,如果這裡沒有重新整理緩衝區的話最後的那三個解構函式被執行,但資料留在緩衝區中,沒有輸出    // 因為解構函式裡面也沒有cout<<endl;之類的重新整理緩衝區,沒有重新整理緩衝區的的輸出結果如圖二    cout << "\n=======================================\n";    return 0;}

以上程式運行結果圖一:

圖二:沒重新整理輸出緩衝區時最後解構函式中待輸出的內容沒有輸出,編譯環境g++

小結:
可以看到:
1)帶有繼承以及組合的類的建構函式順序是: 父類的建構函式->組合成員對象的建構函式 ->子類自己的建構函式;
2)類成原變數的空間分配及初始化是在調用自己建構函式之前進行的,他們的聲明初始化順序由聲明順序決定,這個點在建構函式的初始化列表中的面試考點經常考到,注意,不是由其出現在初始化列表中的順序決定,而是由其在類中聲明的順序決定其初始化的順序;
3)對象在析構的時候,解構函式的調用順序與建構函式的執行順序相反,這個很容易理解,因為常規建立對象比如ClassA a;是在棧裡建立對象的,程式結束或離開了對象的範圍,自然要清空那個原來的棧,棧的彈出都是從棧頂裡面一個個出棧的,但要注意通過new來建立的對象是在堆中建立的,所以對於new出來的對象是在delete的時候才會調用其解構函式,否則不會調用解構函式,即使其離開了範圍或者程式結束都不會調用其解構函式;

註:以上是自己的見解,如果有問題或錯誤歡迎各位指正和討論,謝謝

參考資料:
http://blog.csdn.net/lazy_tiger/article/details/2093020 謝謝

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.