虛擬繼承應該還說就是建立在多繼承的基礎上、也就是說無多繼承就無所謂的虛擬繼承、而虛擬繼承的存在也就是為了省下些多重繼承的效能、
這什麼這樣說呢、因為邇使用多繼承時、如果最終類是通過多個類繼承的、而這些類都是由同乙個基類繼承時、對最終類的例項化就會重複執行、造成效能的浪費
比如
classhuman {};
class mother : public
human {};
class father : public
human {};
class son : public mother, public father {};
那麼這樣的話、執行son類的初始化就會執行兩次human的初始化、son初始化、引發mother和father初始化、而mother和father各引發了一次human的初始化、所以是執行了兩次初始化、是不是狠浪費效能呢
改成虛擬繼承的話、
classhuman {};
class mother : public
virtual
human {};
class father : public
virtual
human {};
class son : public mother, public father {};
這樣的話、只引發一次human的初始化、human初始化發生在son初始化時、son初始化時初始化自身和human、並且引發了mother和father的初始化、但mother和father並不再初始化human、這時候、當虛擬繼承時、僅在最終派生類負責虛擬繼承基類的初始化
繼承 多繼承 菱形虛擬繼承
繼承 繼承是由父類和子類 或稱之為基類與派生類 兩種角色構成,子承父業,就是說派生類會繼承基類的所有的成員,並擁有自己特有的成員。用一段 來解釋說明繼承關係 include using namespace std class base 基類 class derived public base 以共有...
多繼承與多重繼承
什莫是多繼承?乙個類擁有兩個或者兩個以上的父類 什莫是多重繼承?乙個類不僅僅有父類還有祖父類 什莫是虛繼承?虛繼承是為了解決多繼承的問題 經過這樣的宣告後,當基類通過多條派生路徑被乙個派生類繼承時,該派生類只繼承該基類一次,也就是說,基類成員只保留一次。菱形繼承 以往,在派生類的建構函式中只需負責對...
多繼承與菱形繼承
乙個派生類繼承了兩個或多個基類,這樣的繼承關係叫做多繼承。include using namespace std class b class b1 class d public b,public b1 int main 如上 派生類d以public許可權繼承了基類b和基類b1。構造函式呼叫 首先呼叫...