2011-01-05 8 views
4
#include<iostream> 

class base{ 
public: 
base(){std::cout<<"In base";} 
}; 

class dv1:virtual private base { 
public: 
dv1(){std::cout<<"In DV1";} 
}; 

class dv2:virtual private base { 
public: 
dv2(){std::cout<<"In DV2";} 
}; 

class drv : public dv1, public dv2 { 
public: 
drv() {std::cout<<"Why is this working";} 
}; 

int main() { 
drv obj; 

return 0; 
} 

仮想継承の場合ではなく、コンストラクタを呼び出すのは、ほとんどの派生クラスの責任ですか? 注:ここでは、ベースは事実上、私的に継承されています。仮想継承でコンストラクタを呼び出すのは誰ですか?

+0

のパラメータなしのコンストラクタの呼び出しを生成し、出力はあなたの何対何であるので、明示的に、その基底クラス(ES)のコンストラクタを呼び出していませんでしたdrvのあなたのコンストラクタ期待していた?あなたが何か違うものを期待していたなら、私はあなたに戻って、継承に関する章を再訪し、まずそれを理解しようと勧めます。 – Nim

+0

私はそれが基本的にコンパイルされないと予想しています。 – Learner

答えて

5

コンパイラは、基本クラス

+0

それはそうです...しかし、どうしたらできますか? – Learner

+2

'base :: base()'はpublicなので、 'drv'はこのコンストラクタにアクセスできます。 'base'が' dv1'と 'dv2'のプライベートベースであるという事実は関係ありません。 –

関連する問題