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

歡迎訪問 生活随笔!

生活随笔

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

c/c++

虚继承c语言例子,C/C++ 多继承{虚基类,虚继承,构造顺序,析构顺序}

發布時間:2025/5/22 c/c++ 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 虚继承c语言例子,C/C++ 多继承{虚基类,虚继承,构造顺序,析构顺序} 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

C/C++:一個基類繼承和多個基類繼承的區別

1.對多個基類繼承會出現類之間嵌套時出現的同名問題,如果同名變量或者函數出現不在同一層次,則底層派生隱藏外層比如繼承基類的同名變量和函數,不會出現二義性,而如果出現在同一階層,?則會 出現二義性,解決辦法:要么在同一階層的底層(派生類)中重新定義可以解決,或者使用虛基類(減少部分二義性)

2.虛基類:在派生列表中使用virtual關鍵字的基類(即使這部分虛基類在繼承中多次出現,但只初始化一份) ?虛繼承:虛基類將被 "最底層派生類"(任何虛基類以下派生類都可能是最底層派生類,所以都應該提供虛基類的初始值(即構造虛基類))初始化,因此最底層派生類應該含有它所有虛基類的初始值(即構造虛基類)

3.虛基類保證多次繼承相同基類但只有一份基類數據(保證共享);

4.虛繼承的構造順序由編譯器按照派生類列表從左往右尋找虛基類函數,先構造虛基類部分,然后按照正常構造從左到右構造,最后構造本身,而析構相反

5.派生類的合成拷貝和構造,賦值都是按照上述規則執行,所以手動寫拷貝,構造,和賦值時,需要按照這個順序構造

6.所以虛繼承出現在虛基類之后(個人理解)

C/C++代碼:

#include

#include

class Class

{

};

class Base : public Class

{

protected:

int value;

public:

Base() : value(0)

{};

Base(const Base &rhs) : Class(), value(rhs.value)

{};

Base(int a) : value(a), Class()

{};

};

class D1 : virtual public Base

{

public:

D1() : Base()

{};

D1(int a) : Base(a)

{};

D1(const D1 &rhs) : Base(rhs)

{};

};

class D2 : virtual public Base

{

public:

D2() : Base()

{};

D2(int a) : Base(a)

{};

D2(const D2 &rhs) : Base(rhs)

{};

};

class MI : public D1, public D2

{

public:

MI() : D1(), D2()

{}

MI(int a) : Base(a), D1(a), D2(a)

{};

MI(const MI &rhs) : Base(rhs), D1(rhs), D2(rhs)

{};

};

class Final : public MI, public Class

{

public:

using Base::value;

Final()

{};

Final(int a) : Base(a), MI(a), Class()

{};

Final(const Final &rhs) : Base(rhs), MI(rhs), Class()

{};

};

int main()

{

Final A(20);

std::cout << A.value << std::endl;

return 0;

}

總結

以上是生活随笔為你收集整理的虚继承c语言例子,C/C++ 多继承{虚基类,虚继承,构造顺序,析构顺序}的全部內容,希望文章能夠幫你解決所遇到的問題。

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