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

No. Нарисуйте картинку; все основания являются уникальными:

A 
| 
V 
B C 
\/
    V 
    D 

«Проблема алмаза» относится только к неоднозначным базовым классам из-за многочисленные повторные основания, например, если D должны были получить от обоих A -> B и A -> C:

No-diamond-problematic:     Virtually-inherited diamond: 

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