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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > c/c++ >内容正文

c/c++

C++多继承与虚继承

發(fā)布時(shí)間:2025/3/15 c/c++ 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++多继承与虚继承 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

目錄

?

多繼承與虛繼承以及存在的問(wèn)題

例子


多繼承與虛繼承以及存在的問(wèn)題

虛繼承

有了多繼承,虛繼承才會(huì)有意義

如果有個(gè)菱形結(jié)構(gòu)的繼承,爺爺類為A,然后B,C是A的派生類,最后D是B和C的派生類,
如果在A中有一個(gè)成員變量a,D去調(diào)用就會(huì)出現(xiàn)訪問(wèn)不明確,

虛繼承就可以解決訪問(wèn)不明確的這種問(wèn)題
如果這樣繼承B,C虛繼承了A,virtual public,然后D繼承B,C

通常的理解方式!
在虛繼承之后,A里面的成員變量a是不復(fù)制給B和C的,而是只給了B和C使用權(quán),所以D也只有使用權(quán)

多繼承,虛繼承不建議用,結(jié)構(gòu)復(fù)雜,內(nèi)存開(kāi)銷比較大。
用菱形的結(jié)構(gòu)簡(jiǎn)單的就可以了,可讀性比較好

這里的A叫做虛基類
?

例子

采用多繼承,會(huì)出現(xiàn)訪問(wèn)不明確的問(wèn)題。

如下代碼:

#include <iostream> using namespace std;class A{public:A(){m_valueA = 0;}int m_valueA;void print(){cout << "class A print() called!" << endl;} };class B: public A{};class C: public A{};class D: public B, public C{};int main(){D d;cout << d.m_valueA << endl;getchar();return 0; }

運(yùn)行報(bào)錯(cuò)截圖如下:

?

此時(shí)采用虛繼承就能很好的解決這個(gè)問(wèn)題:

代碼如下:

#include <iostream> using namespace std;class A{public:A(){m_valueA = 0;}int m_valueA;void print(){cout << "class A print() called!" << endl;} };class B: virtual public A{};class C: virtual public A{};class D: public B, public C{};int main(){D d;cout << d.m_valueA << endl;getchar();return 0; }

運(yùn)行截圖如下:

總結(jié)

以上是生活随笔為你收集整理的C++多继承与虚继承的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。