簡體   English   中英

C ++共同祖先問題。 它是什么?

[英]C++ Common Ancestor Problem. What is it?

嗨,我剛完成期末考試。 有一個問題說,“定義C ++中的共同祖先問題”,並說明使用該語言的什么功能來解決此問題。

我不記得曾經在課堂上學習過共同的祖先問題,也從未聽說過它。 但是我寫了以下內容:

我說這與繼承有關。 如果父類和子類定義具有相同方法簽名的相同方法。 例如,如果我有上課的父母和班級的孩子。

在上課的父母我有

void sayHello(){
    cout << "hello I'm a parent" <<endl;
}

然后在班上我有

void sayHello(){
    cout << "hello I'm a child" <<<endl;
}

那如果我有

Parent* p1;
Child* c1 = new Child();
p1 = & c1;

如果我調用p1.sayHello()即使它綁定到Child類型的實例,我也會從父類中調用method sayHello()

因此,為了解決這個問題,我們必須使用virtual關鍵字並說

virtual void sayHeyllo(){
.....
} 

因此,我調用p1.sayHello()來調用Child類而不是父類中的方法。

這個對嗎? 我只是猜測,但這很有道理。 我用C ++搜尋了祖先的常見問題,但沒有發現任何問題。 你知道我是否正確嗎?

謝謝。 Ť

我認為這意味着傳承鑽石。 當您遇到以下情況時:

struct A {};
struct B : A {};
struct C : A {};

struct D : B, C {}; // here is the problem

D的問題是A有兩個副本,一個來自B ,一個來自C 要解決此問題,您必須使用virtual inheritance

struct A {};
struct B : virtual A {};
struct C : virtual A {};

struct D : B, C {}; // No problem!

它可能是指多重繼承,其中幾個基類具有一個公共父代(“ 鑽石繼承 ”):

struct A {};
struct B1 : A {};
struct B2 : A {};
struct C : B1, B2 {};

要求的解決方案應該是虛擬繼承:

struct A {};
struct B1 : virtual A {};
struct B2 : virtual A {};
struct C : B1, B2 {};

通常,這實際上是指具有多重繼承的鑽石問題

這是有關C ++如何處理此問題的詳細參考資料

我本以為這是指鑽石繼承( http://en.wikipedia.org/wiki/Diamond_problem

您將使用的C ++功能是虛擬繼承:

class Foo : virtual public Bar
{
}

在SO中搜索鑽石繼承。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM