semaj
semaj

Reputation: 63

Calling base class method from derived constructor

class Base {
    public:
    Base() {}

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

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

        Foo(result);
    }
};

Is it allowed to call a method of the base class in the constructor of the derived class? I would imagine this is fine as the Base object should be fully constructed, but I wanted to check just in case.

Upvotes: 6

Views: 4970

Answers (2)

adf88
adf88

Reputation: 4442

There is a danger when:
1. the method is overridden
2. the method calls other methods that are overridden

Upvotes: 2

sbi
sbi

Reputation: 224009

Is it allowed to call a method of the base class in the constructor of the derived class?

Yes. Just watch out for virtual functions. If an class derived from Derived overrides a virtual function, while constructing Derived as a sub-object of that further derived class, the dynamic type always is Derived, so no virtual functions overridden in further derived classes are called. (The same goes for the destructor, BTW.)

I would imagine this is fine as the Base object should be fully constructed, but I wanted to check just in case.

Your reasoning is right.

Upvotes: 12

Related Questions