注意:多重繼承在實際開發中盡量少用,能不用就不用。多重繼承很繁雜,很複雜。
在這裡我主要講多重繼承的細節。
第一
繼承方法:
例如已宣告了類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基...