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

「ダイヤモンドの問題」は、複数の反復塩基に起因するあいまいな塩基のクラスにのみ関連する。 DA -> BA -> Cの両方から派生した場合:

No-diamond-problematic:     Virtually-inherited diamond: 

     A A           A 
     | |          v/ \v 
     B C          B C 
     \/          \/
      V           V 
      D           D 
関連する問題