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