Есть вот такой вот код (пример):
class A{
public:
A(int x,int y){//конструктор с параметрами
//nothing...
}
};
class B:public virtual A{
public:
B(int x,int y,int z):A(x,y){//констрктор, в котором вызываются конструктор родитля, все логчно
//nothing...
}
};
class C:public virtual B{
public:
C(int x,int y,int z,int value):B(x,y,z),A(x,y){//вот только так работает
//nothing...
}
};
Почему в классе С приходится писать вызов коструктор A. Почему он не может вызваться из класса B?
Есть какое-то подозрение, будто это связано с виртуальным наследованием. Но хочу узнать наверняка.
Ответ
Вы правильно догадываетесь - это связано именно с виртуальным наследованием, т.к. в этом случае инициализация виртуального базового класса происходит в самом дальнем по иерархии потомке, в вашем случае в классе C. В этом-то и есть смысл виртуальных базовых классов - они присутствуют в объекте производного класса только в одном экземпляре. Активно используется при множественном наследовании от классов, имеющих общий базовый класс. В вашем случае это, скорее всего, лишнее.
Комментариев нет:
Отправить комментарий