(36 2)多重繼承之虛基類

2021-10-02 12:53:25 字數 1737 閱讀 1462

class 派生類名: virtual 訪問標號 虛基類名,..

.;

#include 

using namespace std;

class

a// 宣告為基類a

void fun(

) private:

int nv;

//私有成員};

class

b1:virtual public a//宣告a為虛基類,派生出b1

private:

int nv1;};

class

b2:virtual public a//宣告a為虛基類

private:

int nv2;};

//這裡繼承a類的成員繼承了2回,但是由於b1和b2都將a宣告為虛基類,所以c繼承a類的成員只會繼承1次

class

c:public b1,public b2

void fund(

) private:

int nvd;};

int main(

)執行結果:

member of a

member of b1

member of b2

member of c

fun of c

fun of a

classa}

;//定義基類

class

b: virtual public a };

//對基類a初始化

class

c: virtual public a };

//對基類a初始化

class

d: public b,public c};

不僅對b和c進行初始化,還要對a進行初始化

#include 

using namespace std;

enum color

;//顏色列舉型別

class

circle

//圓類circle的定義

~circle(

)float area()}

;class

table

//桌子類table的定義

~table(

)float height()}

;class

roundtabe

:public table,public circle//圓桌類的定義

~roundtabe()}

;roundtable:

:roundtable(

float h,

float r,color c)

:table(h)

,circle(r)

//圓桌建構函式的定義

int main(

)建構函式與析構函式的呼叫順序相反

結果:table initialized!

circle initialized!

roundtable initialized!

the table properties are:

height=

15area=

12.5664

color=

1roundtable destroyed!

circle destroyed!

table destroyed!

多重繼承 虛繼承與虛基類

一 多重繼承 單重繼承 乙個派生類最多只能有乙個基類 多重繼承 乙個派生類可以有多個基類 class 類名 繼承方式 基類1,繼承方式 基類2,派生類同時繼承多個基類的成員,更好的軟體重用 可能會有大量的二義性,多個基類中可能包含同名變數或函式 多重繼承中解決訪問歧義的方法 基類名 資料成員名 或成...

多重繼承與虛基類

多重繼承 multiple inheritance,mi 虛基類虛基類使得從多個類 它們的基類相同 派生出的物件只繼承乙個基類物件。通過使用關鍵字virtual。例如,可以使worker被用作singer和waiter的虛基類 virtual和public的次序無關緊要 class singer v...

C 多重繼承 虛基類

使用多個基類的繼承被稱為多重繼承 mi mi描述的是有多個直接基類的類。與單繼承一樣,公有mi表示的也是 is a關係。mi帶來的兩個主要問題 1.從兩個不同的基類繼承同名方法。2.從兩個或更多相關基類那裡繼承同一類的多個例項。例如 singer 和 waiter都繼承了乙個worker 元件,因此...