Вызов метода базового класса от конструктора порожденного класса

class Base {
    public:
    Base() {}

    void Foo(int x) {...}
};

class Derived : public Base {
    public:
    Derived(int args) {
        /* process args in some way */

        Foo(result);
    }
};

Позволяется назвать метод базового класса в конструкторе производного класса? Я предположил бы, что это прекрасно, поскольку Базовый объект должен быть полностью создан, но я хотел проверить на всякий случай.

6
задан semaj 19 June 2010 в 10:44
поделиться

2 ответа

Разрешено ли вызывать метод базового класса в конструкторе производного класса?

Да. Просто обратите внимание на виртуальные функции. Если класс, производный от Derived , переопределяет виртуальную функцию, создавая Derived как подобъект этого дополнительного производного класса, динамический тип всегда будет Derived , поэтому никакие виртуальные функции, переопределенные в последующих производных классах, не вызываются. (То же самое и с деструктором, BTW.)

Я полагаю, это нормально, поскольку объект Base должен быть полностью сконструирован, но я хотел проверить на всякий случай.

Ваши рассуждения верны.

12
ответ дан 8 December 2019 в 18:32
поделиться

Существует опасность, когда:
1. метод переопределен
2. метод вызывает другие методы, которые переопределяются

1
ответ дан 8 December 2019 в 18:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: