Я новичок в C++, особенно об объектно-ориентированном программировании. И теперь у меня проблема во время обучения.Заказ конструктора в виртуальном наследовании
Существует иерархия классов следующего:
class Class{};
class Base:public Class{};
class Derived1:virtual public Base{};
class Derived2:virtual public Base{};
class MI:public Derived1,public Derived2{};
class Final:public MI,public Class{};
И теперь я хочу знать, что порядок конструктора для определения заключительного объекта класса.
начертить схему: structure of class inheritance http://hi.csdn.net/attachment/201203/16/2712336_1331902452BziD.jpg
Я знаю виртуальные базовые классы всегда построенные до базовых классов не виртуальной, независимо от того, где они появляются в иерархии наследования. Я запутался в том, что если конструктор класса Class находится перед базой, а если конструктор класса вызывается дважды. И почему?
Может кто-нибудь сказать мой ответ? Чем детальнее, тем лучше.
Довольно легко разобраться в ленивом пути. Построить программу. Поместите отладочные сообщения cout в каждый из ваших конструкторов (.e.g «Я базовый конструктор!»). Соблюдайте порядок построения, следуя инструкциям cout. –
предупреждение: прямая база 'Class' недоступна в' Final' из-за двусмысленности –
@ 0A0D: Конечно, это только говорит вам о том, как реализуется ее компилятор. Это может быть достаточно для вас, но, возможно, это не так. :) –