C++建構函式與解構函式

來源:互聯網
上載者:User

標籤:情況下   父類   原則   details   父類繼承   預設   link   必須   建構函式   

一 建構函式與解構函式的執行順序    

c++中對象都是先構造成員變數,再調用自身的建構函式;故父類成員變數首先被構造,然後調用父類的建構函式,再構造子類的成員變數,最後調用子類的建構函式。

對象析構時與構造順序相反,子類先調用自身的解構函式,再調用子類成員變數的解構函式,再調用父類的解構函式,再析構父類的成員變數。

二 子類的建構函式寫法

1)

構造方法用來初始化類的對象,與父類的其它成員不同,它不能被子類繼承(子類可以繼承父類所有的成員變數和成員方法,但不繼承父類的構造方法)。因此,在建立子類對象時,為了初始化從父類繼承來的資料成員,系統需要調用其父類的構造方法。

    如果沒有顯式的建構函式,編譯器會給一個預設的建構函式,並且該預設的建構函式僅僅在沒有顯式地聲明建構函式情況下建立。

構造原則如下:

    1. 如果子類沒有定義構造方法,則調用父類的無參數的構造方法。

    2. 如果子類定義了構造方法,不論是無參數還是帶參數,在建立子類的對象的時候,首先執行父類無參數的構造方法,然後執行自己的構造方法。

    3. 在建立子類對象時候,如果子類的建構函式沒有顯示調用父類的建構函式,則會調用父類的預設無參建構函式。

    4. 在建立子類對象時候,如果子類的建構函式沒有顯示調用父類的建構函式且父類自己提供了無參建構函式,則會調用父類自己的無參建構函式。

    5. 在建立子類對象時候,如果子類的建構函式沒有顯示調用父類的建構函式且父類只定義了自己的有參建構函式,則會出錯(如果父類只有有參數的構造方法,則子類必須顯示調用此帶參構造方法)。

2)子類調用父類帶參數建構函式的方法

class Camera {public:    explicit Camera(camera_set *set);};class MyCamera: public Camera {public:    MyCamera(camera_set *set) :            Camera(set) {    }};

三 對象初始化的兩種方式

對象調用建構函式有兩種方式,如下

Camera camera(&set);
Camera *camera=new Camera(&set);

 

 

 

參考引用:

C++中成員變數 父類 子類構造析構順序

C++繼承中關於子類建構函式的寫法

 

C++建構函式與解構函式

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.