class Base {
public:
Base() {}
void Foo(int x) {...}
};
class Derived : public Base {
public:
Derived(int args) {
/* process args in some way */
Foo(result);
}
};
Позволяется назвать метод базового класса в конструкторе производного класса? Я предположил бы, что это прекрасно, поскольку Базовый объект должен быть полностью создан, но я хотел проверить на всякий случай.
Разрешено ли вызывать метод базового класса в конструкторе производного класса?
Да. Просто обратите внимание на виртуальные
функции. Если класс, производный от Derived
, переопределяет виртуальную функцию, создавая Derived
как подобъект этого дополнительного производного класса, динамический тип всегда будет Derived
, поэтому никакие виртуальные функции, переопределенные в последующих производных классах, не вызываются. (То же самое и с деструктором, BTW.)
Я полагаю, это нормально, поскольку объект Base должен быть полностью сконструирован, но я хотел проверить на всякий случай.
Ваши рассуждения верны.
Существует опасность, когда:
1. метод переопределен
2. метод вызывает другие методы, которые переопределяются