c 之菱形繼承問題

2022-07-25 01:24:17 字數 829 閱讀 2989

昨天面試問了菱形繼承的問題,回答的稀巴爛,回來趕快好好學習一波!!!!!

菱形繼承如下圖:

可以看到,如果不利用域限定需要訪問的函式,那麼就會出現模糊呼叫的問題,但是貌似c++給了更好的方法,虛繼承!

#includeusing

namespace

std;

class

base

};class a:virtual

public

base;

class c:virtual

public

base;

class d:public a,public

c;int

main()

利用虛繼承就可以解決菱形繼承的問題,具體實現是:a和c中不再儲存base的具體內容,而是儲存了乙份偏移位址,所以在d呼叫fun()時,呼叫的就是base的fun(),但對於a、c相同的變數名,d在呼叫時還是要利用域限定來處理。虛繼承不同於虛函式,虛函式在c++中主要用於實現多型,具體見

:虛函式、動態繫結和靜態繫結。

C 菱形繼承

在c 繼承體系中,有一類問題是永遠跑不掉的即菱形繼承問題。此類問題又被稱作鑽石繼承問題,只是一種較差的設計結構,剛好看到這個問題,特此總結一下。先來看一下菱形繼承的基本結構 a和b從基類base中繼承,而d多重繼承於a,b。那就意味著d中會有base中的兩個拷貝。因為成員函式不體現在類的記憶體大小上...

c 菱形繼承

單繼承 乙個子類只有乙個父類時稱為單繼承 多繼承 乙個子類有兩個或者兩個以上時這個繼承關係為多繼承 菱形繼承是多繼承的一種特殊情況 在繼承中子類會繼承父類的所有的成員,可以看出菱形繼承有資料冗餘和二義性的問題。assistant中會有person的兩份資料。可以從上面看出來我們的assistant中...

C 菱形繼承

1 多重繼承的問題 在c 類的繼承中會遇到這樣乙個問題,乙個派生類有兩個或者兩個以上的基類,如同下面這種繼承情況 類c繼承了類a和類b,但是類a和類b裡面有著相同的成員變數,那麼類c在使用這個成員變數的時候就會出現二義性的問題,需要通過域成員運算子進行區分 class a a void displa...