Страницы

Поиск по вопросам

четверг, 22 ноября 2018 г.

Наследование в С++

Есть вот такой вот код (пример): 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. В этом-то и есть смысл виртуальных базовых классов - они присутствуют в объекте производного класса только в одном экземпляре. Активно используется при множественном наследовании от классов, имеющих общий базовый класс. В вашем случае это, скорее всего, лишнее.

Комментариев нет:

Отправить комментарий