Это связано с виртуальным наследованием.
Когда класс наследуется виртуально, это самый ответственный класс в иерархии, который вызывает его конструктор: здесь Derived
.
Поскольку Base
является конструируемым по умолчанию, и вы ничего не указали, Derived
вызывает конструктор по умолчанию Base
.
Если вы хотите, чтобы строка была напечатана, используйте:
Derived(const string & strVar) : Base(strVar), Derived1(strVar), Derived2(strVar)
{
std::cout << "Derived Constructor\n";
}
Вы можете удалить конструктор по умолчанию, чтобы позволить компилятору диагностировать проблему, хотя не все компиляторы выдают очень полезные сообщения.