Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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.

like image 333
semaj Avatar asked Jun 19 '10 10:06

semaj


1 Answers

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.

like image 98
sbi Avatar answered Sep 19 '22 01:09

sbi