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

歡迎訪問 生活随笔!

生活随笔

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

c/c++

C++多继承与虚继承

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

目錄

?

多繼承與虛繼承以及存在的問題

例子


多繼承與虛繼承以及存在的問題

虛繼承

有了多繼承,虛繼承才會有意義

如果有個菱形結構的繼承,爺爺類為A,然后B,C是A的派生類,最后D是B和C的派生類,
如果在A中有一個成員變量a,D去調用就會出現訪問不明確,

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

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

多繼承,虛繼承不建議用,結構復雜,內存開銷比較大。
用菱形的結構簡單的就可以了,可讀性比較好

這里的A叫做虛基類
?

例子

采用多繼承,會出現訪問不明確的問題。

如下代碼:

#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; }

運行報錯截圖如下:

?

此時采用虛繼承就能很好的解決這個問題:

代碼如下:

#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; }

運行截圖如下:

總結

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

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