C 多重繼承

2021-10-02 09:18:56 字數 1497 閱讀 6010

注意:多重繼承在實際開發中盡量少用,能不用就不用。多重繼承很繁雜,很複雜。

在這裡我主要講多重繼承的細節。

第一

繼承方法:

例如已宣告了類a、類b和類c,那麼可以這樣來宣告派生類d:

class d: public a, private b, protected c;
d 是多繼承形式的派生類,

d 有3個父類(基類)

它以公有的方式繼承 a 類,

以私有的方式繼承 b 類,

以保護的方式繼承 c 類。

d 根據不同的繼承方式獲取 a、b、c 中的成員.

第二

派生類中的建構函式:

以上面的 a、b、c、d 類為例,d 類建構函式的寫法為:

d(形參列表): a(實參列表), b(實參列表), c(實參列表)
注意:

如果a,b,c基類中,都包含資料成員name,那麼派生類d都會將他們繼承下來。

在自己的建構函式中為他們賦值的話,他們屬於不同的記憶體,所以都可以賦值,不會起衝突。

d(const char *name): a(name), b(name), c(name)
多繼承的建構函式的呼叫順序:

基類建構函式的呼叫順序和和它們在派生類建構函式**現的順序無關,

而是和宣告派生類時基類出現的順序相同。

例:

class d: public a, private b, protected c;
呼叫建構函式的順序是:a, b, c

補充:

假如基類a,b,c都有乙個成員函式play(),派生類d繼承他們後,同時也會把他們三個的paly()方法都繼承過來。

當d類的物件去呼叫play()這個方法就會出錯,因為編譯器完全不知要呼叫哪個。

例:

class a 

};class b

};class b

};class d : public a, public b, public c ;

int main(void)
以上這種二義性的問題有兩個解決方法:

第一,指明類去呼叫:

int main(void)
第二,自己類中建乙個:

class a 

};class b

};class b

};class d : public a, public b, public c

};

這樣子呼叫,就會呼叫到自己定義的play()方法了,使**更簡明,簡介

int main(void)

多重繼承 C 中的多重繼承

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

c 多重繼承

其實想寫這篇文章,是因為突然在整理論壇上的帖子的時候,突然發現乙個人問我如何才能在c 中實現多重繼承,當時我答的很隱晦,因此這裡我想補充說明一下.首先,我要說明一下,c 中是沒有類的多重繼承這個概念.要使用多重繼承必須要通過介面inte ce來完成.可是大家都知道inte ce實際上就是乙個虛函式列...

C 多重繼承

c 中的多繼承可看做是單繼承的擴充套件,就是乙個派生類對應多個基類。以下是一段多重繼承的 class a class b class c public a,public b 以上的程式中,派生類c繼承了基類a b。派生類c中,公有繼承了a,所以c的共有成員中有a中的兩個共有成員函式,而私有繼承的b基...