[英]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 {};
通常,這實際上是指具有多重繼承的鑽石問題 。
我本以為這是指鑽石繼承( http://en.wikipedia.org/wiki/Diamond_problem )
您將使用的C ++功能是虛擬繼承:
class Foo : virtual public Bar
{
}
在SO中搜索鑽石繼承。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.