В Inheritance, когда создается производный класс (создается производный класс obj), тогда первая память откладывается.После этого вызывается конструктор производного класса.
class Base
{
public:
int m;
Base(int x=0)
: m(x)
{
}
};
class Derived: public Base
{
public:
double n;
Derived(double y=0.0)
: n(y)
{
}
};
В приведенном выше примере при создании объекта производного класса вызывается конструктор производного класса.
Проблема в том, что, как я изучал, конструктор базового класса вызывается до вызова конструктора производного класса.Но нигде в производном классе нет явной инструкции, чтобы сначала перейти к конструктору базового класса.Как компилятор узнает, что конструктор базового класса должен быть выполнен первым ????
Я думал, что ответом будет следующая строка в объявлении базового класса:
class Derived: public Base
Но,проблема заключается в изменении производного класса следующим образом: мы можем убедиться, что конструктор базового класса вызывается и инициализируется перед выполнением тела производного конструктора.
class Derived: public Base
{
public:
double n;
Derived(double y=0.0, int z=0)
: Base(z), n(y)
{
}
};
Итак, проблема в том, что в первом примере не было операторачтобы сказать, что конструктор базового класса должен быть вызван первым, но на самом деле он вызывается первым, во втором измененном примере я сообщаю компилятору сначала перейти к конструктору базового класса.Разве он уже не знает, как перейти к конструктору базового класса?Какая разница в исполнении между двумя примерами и каковы этапы?
С уважением,