Por que somente o construtor padrão da classe base é chamado na herança múltipla da base virtual? [duplicado]
Esta questão já tem uma resposta aqui:
herança virtual de c ++ 3 respostasEm herança múltipla, eu tenho um virtualBase
classe que é herdada por classeA
e classeB
. A
eB
são classes base deAB
. Por favor veja o código abaixo. Em construtor deA
eB
, Base(string)
construtor é chamado. Espero obter a seguinte saída:
Base::Base(std::string)
A::A()
B::B()
Mas estou recebendo a seguinte saída:
Base::Base()
A::A()
B::B()
Por que o construtor padrão deBase
está sendo chamado?
#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;
}