多重継承では、 classおよび classBase
によって継承される仮想クラスがあります。との基本クラスです。以下のコードを参照してください。andのコンストラクタでは、コンストラクタが呼び出されます。次の出力が得られることを期待しています。A
B
A
B
AB
A
B
Base(string)
Base::Base(std::string)
A::A()
B::B()
しかし、次の出力が得られます。
Base::Base()
A::A()
B::B()
のデフォルトコンストラクタBase
が呼び出されるのはなぜですか?
#include<iostream>
#include<string>
using namespace std;
class Base{
public:
Base(){
cout<<__PRETTY_FUNCTION__<<endl;
}
Base(string n):name(n){
cout<<__PRETTY_FUNCTION__<<endl;
}
private:
string name;
};
class A : public virtual Base {
public:
A():Base("A"){
cout<<__PRETTY_FUNCTION__<<endl;
}
private:
string name;
};
class B : public virtual Base {
public:
B():Base("B"){
cout<<__PRETTY_FUNCTION__<<endl;
}
private:
string name;
};
class AB : public A, public B{
};
int main(){
AB a;
}