если я запускаю этот кодвиртуальный базовый класс с перепадом поведения государственных/частных конструктор
#include<iostream>
using namespace std;
class Final;
class MakeFinal{
public:
friend class Final;
MakeFinal(){cout<<"makefinal\n";}
};
class Final: public virtual MakeFinal{
public:
Final(){cout<<"Final\n";}
};
class Derived:public Final{
public:
Derived(){cout<<"Derived\n";}
};
int main(){
//Final f;
Derived d;
return 0;
}
Выход:
makefinal Final производный
Но если я сделать MakeFinal() конструктор частных , компилятор показывает сообщение об ошибке. На чем основана эта иерархия вызовов конструктора?
Если конструктор базового класса является закрытым, то ничего, кроме класса друга (или самого класса), может сделать один, в том числе через наследование. –
Ужасное форматирование в сторону, почему вы используете виртуальное наследование в первую очередь в этом коде? Вы понимаете, какие проблемы помогает виртуальное наследование? – thokra