繼承中的構造與析構

                                      子類對象的構造

子類構造函數:必須對繼承而來的成員進行初始化----直接通過初始化列表或者賦值的方式進行初始

                                                                                ---調用父類的構造函數進行初始化

對象創建時構造函數的調用順序:

   1.調用父類的構造函數

   2.調用成員變量的構造函數

   3.調用自身的構造函數

 

先父母,後客人,在自己

 

 

 

 

 

 

子類對象的析構:

析構函數的調用順序與構造函數的順序相反

     1.執行自身的析構函數

     2,.執行成員變量的析構函數

     3執行父類的析構函數

 

 

 

 

子類對象在創建時需要調用父類構造函數進行初始化

先執行父類構造函數然後再執行成員的構造函數

父類構造函數顯示調用需要在初始化列表中進行

子類隊形在銷燬時需要調用父類析構函數進行清理

 

 

#include <iostream>
#include <string>

using namespace std;

class Object
{
public:
    Object(string s)
    {
        cout << "Object(string s) : " << s << endl;
    }
};

class Parent : public Object
{
public:
    Parent() : Object("Default")
    {
        cout << "Parent()" << endl;
    }
    Parent(string s) : Object(s)
    {
        cout << "Parent(string s) : " << s << endl;
    }
};

class Child : public Parent
{
    Object mO1;
    Object mO2;
public:
    Child() : mO1("Default 1"), mO2("Default 2")
    {
        cout << "Child()" << endl;
    }
    Child(string s) : Parent(s), mO1(s + " 1"), mO2(s + " 2")
    {
        cout << "Child(string s) : " << s << endl;
    }
};

int main()
{       
    Child cc("cc");
    
    return 0;
}

 

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