Порядок строительства хорошо определен в C++. Конструкция начинается в списке инициализации (наиболее производный тип), из которого вызывается все остальные конструкторы. Сначала виртуальные базы, затем прямые базы в другом объявлении (они будут в том же порядке, чтобы строить свои собственные базы и члены) и, наконец, члены в порядке объявления в классе, а не в порядке, в котором конструкторы, как представляется, вызываются в списке инициализации.
Невозможно повлиять на порядок, в котором происходит строительство, и безопасно получить доступ к элементам базы в конструкции производного типа. Вероятно, удивительно, что в противоположном направлении вызов виртуальной функции из базового конструктора. На каждом этапе процесса строительства изменяется тип объекта. То есть, заданный объект типа X с базами B_i, только после того, как все подобъекты B_i завершили и прямо до того, как первый член X начнет, тип объекта станет X. Импликацией этого является то, что вызов виртуального метода в базе класс будет отправлен в этот базовый класс, а не на конечный тип, который будет сконструирован.
Добавьте 'std :: cout' каждому конструктору и узнайте. –
Это ваша домашняя работа? Вы пробовали читать книгу? – littleadv
nope - попытка перенести некоторый код, который зависит от этого – Mat