21 1 繼承 與繼承中的static資料成員

2021-10-01 11:18:19 字數 1922 閱讀 8861

當派生類繼承了基類後,構造派生類的物件時會首先構造基類物件,多繼承中,按派生類繼承基類的順序來構造,析構過程按構造的反向順序析構

class a~a

()};

class d : public a~d

()};

void

main()

以上**的執行結果是:

a::a()

d::d()

d::~d()

a::~a()

以下**時可以正常執行的

//當派生類繼承的基類的構造方法有預設值的引數,且派生類成員是基類物件時

class a

~a()

private:

int a_data = 1; //c++11

};class b

~b() };

class c

~c() };

class d : public c, public a, public b

~d()

private:

a _a;

b _b;

c _c;

};void main()

以上**的執行結果是:

c::c()

a::a()

b::b()

a::a()

b::b()

c::c()

d::d()

d::~d()

c::~c()

b::~b()

a::~a()

b::~b()

a::~a()

c::~c()

通過以上執行結果可以再次可以證明 :

當派生類繼承了基類後,構造派生類的物件時會首先構造基類物件,多繼承中,按派生類繼承基類的順序來構造,析構過程按構造的反向順序析構

必須在派生類的建構函式後面加上基類構造的初始化列表,如果派生類中有成員是基類物件時,在初始化列表中就需要給派生類基類物件成員初始化

//當派生類繼承的基類的構造方法有引數但無預設值時

class a

~a()

private:

int a_data = 1; //c++11

};class b

~b() };

class c

~c() };

class d : public c, public a, public b

~d()

private:

a _a;

b _b;

c _c;

};void main()

基類定義了static靜態成員,則整個繼承體系裡面只有乙個這樣的成員。無論派生出多少個子類,都只有一

個static成員

class base

protected:

void fun()

public:

static int object_count;

};int base::object_count = 0;

class a : public base

{};class b : public base

{};void main()

{ a a;

cout< 基類靜態成員被所有物件(基類和派生類)共有

VC中的多重繼承與虛擬繼承

多重繼承舉例 include class a virtual a class b public a virtual b class c public a virtual c class d public b,public c virtual d int tmain int argc,tchar ar...

介面繼承(說明繼承)與實現繼承

宣告非純虛函式 impure virtual 的目的是讓繼承類繼承該函式的介面和預設實現。與純虛函式唯一的不同就是其為繼承類提供了預設操作,繼承類可以不實現自己的操作而採用基類提供的預設操作。宣告非虛函式 non virtual 的目的是為了令繼承類繼承函式介面及乙份強制性實現。相對於虛函式來說,非...

繼承與派生, 繼承的應用

一,什麼是繼承?繼承是一種新建類的方式,新建的類稱為子類,被繼承的類稱為父類。繼承的特性是 子類會遺傳父類的屬性。強調 繼承是類與類之間的關係 二,為什麼用繼承?繼承的好處就是可以減少 的冗餘 3 如何用繼承 在python中支援乙個類同時繼承多個父類 在python3中 如果乙個類沒有繼承任何類,...