Конструктор класса base
вызывается для инициализации подобъекта класса base
, который содержится в derived
. Вот как работает наследование, это упрощает следование принципу замены Лискова .
Рассмотрим следующее:
class base
{
public:
base() : x(10) { std::cout << "Base()" << std::endl; }
private:
int x;
};
class derived: base {
public:
derived() { std::cout << "Derived()" << std::endl; }
};
Как бы вы инициализировали член base::x
без вызова конструктора базового класса?
Тем не менее, вы должны заметить, что когда вы используете виртуальное наследование , вы должны вызывать конструктор общей базы вручную.