Я пытался найти много, что Что делать, если только один класс создается виртуальным в множественном наследовании? Поведение вызова конструктора мне непонятно в этом случае. Пусть говорят, например code-Последовательность вызовов конструктора в множественном наследовании
#include<iostream>
using namespace std;
class grand{
public:
grand(){cout<<"grandfather"<<endl;}
};
class parent1:virtual public grand{ //virtual used only here
public:
parent1(){cout<<"parent1 "<<endl;}
};
class parent2: public grand{
public:
parent2(){cout<<"parent2"<<endl;}
};
class child:public parent1,public parent2{
public:
child(){cout<<"child"<<endl;}
};
int main() {
child s;
return 0;
}
Выходной сигнал этого кода приходит в
grandfather
parent1
grandfather
parent2
child
, но в коде выше, если мы изменим этот
class parent1:virtual public grand{
public:
parent1(){cout<<"parent1 "<<endl;}
};
class parent2: public grand{
public:
parent2(){cout<<"parent2"<<endl;}
};
к этому
class parent1:public grand{ //virtual removed from here
public:
parent1(){cout<<"parent1 "<<endl;}
};
class parent2:virtual public grand{ //virtual is added here
public:
parent2(){cout<<"parent2"<<endl;}
};
выход показан как
grandfather
grandfather //why parent1 constructor is not called here?
parent1
parent2
child
Моя забота почему родительский конструктор не вызван после деда?
Возможный дубликат [Virtual Inheritance, достаточно одного класса?] (Http://stackoverflow.com/questions/13752482/virtual-inheritance-one-class-enough) – Mikhail
Нет, это касается * порядка вызовов * не о * разделение * сам по себе. –