日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++中的虚继承

發布時間:2025/3/15 c/c++ 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++中的虚继承 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

如果一個派生類從多個基類派生,而這些基類又有一個共同的基類,則在對該基類中聲明
的名字進行訪問時,可能產生二義性


如果一個派生類從多個基類派生,而這些基類又有一個共同
的基類,則在對該基類中聲明的名字進行訪問時,可能產生
二義性
如果在多條繼承路徑上有一個公共的基類,那么在繼承路徑的某處
匯合點,這個公共基類就會在派生類的對象中產生多個基類子對象

#include <iostream> using namespace std;class B { private:/* data */ public:int b;B(/* args */);~B(); };B::B(/* args */) {cout << "sonstruct B" << endl; }B::~B() { }class B1 : public B { public:int b1;};class B2 : public B { public:int b2; };class C : public B1, public B2 { public:int c; };int main(int argc, char *argv[]) {C c1;c1.b1 = 100;c1.b2 = 200;c1.c = 300;// c1.b = 500; //繼承的二義性 和 虛繼承解決方案c1.B1::b = 500; //繼承的時候基類產生了兩個子類對象c1.B2::b = 500;cout<<"hello..."<<endl;return 0; }

? 要使這個公共基類在派生類中只產生一個子對象,必須對這個基類
聲明為虛繼承,使這個基類成為虛基類。
? 虛繼承聲明使用關鍵字 virtual


增加 virtual關鍵字之后,基類構造函數其實只調用了一次

#include <iostream> using namespace std;class B { private:/* data */ public:int b;B(/* args */);~B(); };B::B(/* args */) {cout << "sonstruct B" << endl; }B::~B() { }class B1 : virtual public B { public:int b1;};class B2 : virtual public B { public:int b2; };class C : public B1, public B2 { public:int c; };int main(int argc, char *argv[]) {C c1;c1.b1 = 100;c1.b2 = 200;c1.c = 300;c1.b = 500; //繼承的二義性 和 虛繼承解決方案c1.B1::b = 500;c1.B2::b = 500;cout<<"hello..."<<endl;return 0; }

執行結果如下:

construct B hello...

總結

以上是生活随笔為你收集整理的C++中的虚继承的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。