2012-01-11 111 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