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

"다이아몬드 문제"는 여러 반복 된베이스로 인해 모호한 기본 클래스에만 관련됩니다. DA -> BA -> C 인 경우 :

No-diamond-problematic:     Virtually-inherited diamond: 

     A A           A 
     | |          v/ \v 
     B C          B C 
     \/          \/
      V           V 
      D           D 
관련 문제