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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

[转]c++之菱形继承

發布時間:2025/7/14 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [转]c++之菱形继承 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前天和大學室友吃燒烤,其中談到菱形繼承的問題,突然發現腦中對這個幾乎空白,所以晚上回來就上網搜了搜,言歸正傳,說到菱形繼承,就要說到虛繼承的概念,對于虛繼承,就是為了解決從不同途徑繼承來的同名的數據成員在內存中有不同的拷貝造成數據不一致問題,將共同基類設置為虛基類。這時從不同的路徑繼承過來的同名數據成員在內存中就只有一個拷貝,同一個函數名也只有一個映射。這樣不僅就解決了二義性問題,也節省了內存,避免了數據不一致的問題。
class 派生類名:virtual 繼承方式? 基類名
virtual是關鍵字,聲明該基類為派生類的虛基類。
在多繼承情況下,虛基類關鍵字的作用范圍和繼承方式關鍵字相同,只對緊跟其后的基類起作用。
聲明了虛基類之后,虛基類在進一步派生過程中始終和派生類一起,維護同一個基類子對象的拷貝。

?

菱形繼承的結構如下:
??????????????????????? A?
? ? ? ? ? ? ? ? ? ? ------?
? ? ? ? ? ? ? ? ? ? ? / ? ? \?
? ? ? ? ? ? ? ----- ? ? ------?
? ? ? ? ? ? ? ? ? B ? ? ? ? ? ? C ??
? ? ? ? ? ? ? ----- ? ? ------?
? ? ? ? ? ? ? ? ? ? \ ? ? ? ? /?
? ? ? ? ? ? ? ? ? ? ------?
? ? ? ? ? ? ? ? ? ? ? ? D?
? ? ? ? ? ? ? ? ? ? ------

轉化為代碼形式?

class A{}; //基類

class B:public A{};//子類

class C:public A{};

class D:public B,public C();

如上代碼中A,B,C,D就構成了一個菱形繼承,如果不用虛基類來實現菱形繼承就會導致模糊調用的現象,所謂模糊調用就是說在D的內存中會保留兩個基類A的對象,如何解決這個問題,利用虛基類就能很好的解決這個問題,即可改為

class B:virtual public A{};//子類

?

class C:virtual public A{};

這就是c++臭名昭著的菱形繼承現象,而java則沒有

轉載于:https://www.cnblogs.com/lihaozy/archive/2012/11/29/2794868.html

總結

以上是生活随笔為你收集整理的[转]c++之菱形继承的全部內容,希望文章能夠幫你解決所遇到的問題。

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