2012-01-11 119 views
0

簡單問題: 此層次結構是否會導致DP?C++:鑽石問題

//Abstract base class 
class A { 
    //Implement pure virtual methods with a default definition. 
    //Pure virtual methods are still declared pure virtual. 
}; 

//Abstract derived class 
class B : public A { 
    //Define pure virtual methods with a default definition. 
    //Pure virtual methods are still declared pure virtual. 
}; 

//Abstract base class 
class C { 
    //Define pure virtual methods with a default definition. 
    //Pure virtual methods are still declared pure virtual. 
}; 

//Concrete class 
class D : public B, public C { 
    //Implement all methods from D, B, and C 
}; 

回答

7

否繪製圖片;所有的鹼是唯一的:

A 
| 
V 
B C 
\/
    V 
    D 

「鑽石問題」只適用於不明確的基類由於多次重複的鹼,例如如果D分別來自A -> BA -> C

No-diamond-problematic:     Virtually-inherited diamond: 

     A A           A 
     | |          v/ \v 
     B C          B C 
     \/          \/
      V           V 
      D           D