虛擬繼承與多繼承的區別

2022-05-11 20:21:01 字數 831 閱讀 8522

虛擬繼承應該還說就是建立在多繼承的基礎上、也就是說無多繼承就無所謂的虛擬繼承、而虛擬繼承的存在也就是為了省下些多重繼承的效能、

這什麼這樣說呢、因為邇使用多繼承時、如果最終類是通過多個類繼承的、而這些類都是由同乙個基類繼承時、對最終類的例項化就會重複執行、造成效能的浪費

比如

class

human {};

class mother : public

human {};

class father : public

human {};

class son : public mother, public father {};

那麼這樣的話、執行son類的初始化就會執行兩次human的初始化、son初始化、引發mother和father初始化、而mother和father各引發了一次human的初始化、所以是執行了兩次初始化、是不是狠浪費效能呢

改成虛擬繼承的話、

class

human {};

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。構造函式呼叫 首先呼叫...