多重繼承詳解

2021-10-06 16:17:45 字數 2019 閱讀 4657

一,概念:指的是在繼承關係中,繼承的父類不止乙個。至多可以繼承幾個父類在c++中沒有明確的定義。

class

grand

;classa:

public grand};

classa2}

;classc:

public a,

public a2 //多重繼承

;在這個例子中如果a2和a有相同的函式,那麼定義類c物件時,呼叫該函式要加上作用域運算子,否則,系統不知道呼叫的是a還是a2中的函式。

即:多重繼承的二義性問題。

c obj;

obj a::

fun();

當然,如果類c中含有fun

()函式,那麼類a和a2的fun

()函式將被遮蔽,因此,此時呼叫的將是類c中的fun

()函式。

多重繼承之間的關係:

二:靜態成員在多重繼承中的可見問題

class

grand

;int grand::a =10;

//類外定義

classa:

public grand

;classa2;

classc:

public a,

public a2

;int

main()

三:派生類建構函式與析構函式

主要是呼叫順序問題,這裡可以自己寫**看看呼叫順序。

四:繼承的建構函式。

在繼承體系中,子類可以繼承父類的建構函式,但是,預設建構函式,拷貝建構函式,移動建構函式是不能被繼承的。

class

b1b1()

b1(int i,

int j,

int k,

int n,

int m=10)

};classb2:

public b1

;int

main()

這裡:using b1::b1;相當於b2(

int i,

int j):b1

(i,j)b2(

int i,

int j,

int k,

int n):b1

(i,j,k,n)b2(

int i,

int j,

int k,

int n,

int m):b1

(i, j, k, n,m)b2(

)即,在派生類中都會構造出乙個與之相同形參列表的建構函式。

五:從多個父類繼承建構函式

classd1}

;class

d2d2()

};classd3:

public d1,

public d2

using d2::d2;

//d3(int a):d2(a) };

intmain()

如果在多繼承的派生類中,它從基類繼承來的建構函式中,有相同形參列表的建構函式,那麼,派生類必須重寫這個版本的建構函式。

classd1}

;classd2}

;classd3:

public d1,

public d2

//重寫建構函式};

intmain()

因為, using d1::d1;

//d3(int i):d1(i)

using d2::d2;

//d3(int a):d2(a)

這樣的話,就相當於有相同形參個數的建構函式了

多重繼承 C 中的多重繼承

多重繼承是c 的一項功能,其中乙個類可以從多個類繼承。繼承類的建構函式以它們繼承的相同順序被呼叫。例如,在以下程式中,在a的建構函式之前呼叫b的建構函式。include using namespace std class a class b class c public b,public a not...

多重繼承(菱形繼承)

多重繼承 經典的是菱形繼承,如圖。菱形繼承將會產生的問題 把基類a中的成員變數通過b和c兩次繼承至d。d的繼承結構 可以看到,ma被繼承兩次至d 那麼將如何解決這個問題呢?採用虛繼承的方法,將基類a中的ma直接繼承至d。如下 class a int ma class b virtual public...

多重繼承 virtual

虛擬繼承可以使繼承自自己的class避免重複包含subobject of parent s parent,既包括member data,也包括member function.如果不使用virtual繼承,那在多重繼承的時候就會有多份copy在物件中,那呼叫parnent member functio...