Вызов метода базового класса из производного конструктора - PullRequest
5 голосов
/ 19 июня 2010
class Base {
    public:
    Base() {}

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

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

        Foo(result);
    }
};

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

Ответы [ 2 ]

11 голосов
/ 19 июня 2010

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

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

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

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

1 голос
/ 19 июня 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...