16
Order of Constructor Call

Order of Constructor Call. Base class constructors are always called in the derived class constructors. Whenever you create derived class object, first

Embed Size (px)

Citation preview

Page 1: Order of Constructor Call. Base class constructors are always called in the derived class constructors. Whenever you create derived class object, first

Order of Constructor Call

Page 2: Order of Constructor Call. Base class constructors are always called in the derived class constructors. Whenever you create derived class object, first

• Base class constructors are always called in the derived class constructors. Whenever you create derived class object, first the base class default constructor is executed and then the derived class’s constructor finishes execution.

Page 3: Order of Constructor Call. Base class constructors are always called in the derived class constructors. Whenever you create derived class object, first

Points to Remember

• Whether derived class's default constructor is called or parameterized is called, base class's default constructor is always called inside them.

• To call base class's parameterized constructor inside derived class's parameterized constructor, we must mention it explicitly while declaring derived class's parameterized constructor.

Page 4: Order of Constructor Call. Base class constructors are always called in the derived class constructors. Whenever you create derived class object, first

Base class Default Constructor in Derived class Constructors

class Base{ int x; public: Base() { cout << "Base default constructor“<<endl; }};

Page 5: Order of Constructor Call. Base class constructors are always called in the derived class constructors. Whenever you create derived class object, first

Base class Default Constructor in Derived class Constructors

class Derived : public Base{ int y; public: Derived() { cout << "Derived default constructor“<<endl; } Derived(int i) { cout << "Derived parameterized constructor“<<endl; }};

Page 6: Order of Constructor Call. Base class constructors are always called in the derived class constructors. Whenever you create derived class object, first

Base class Default Constructor in Derived class Constructors

int main(){ Base b; Derived d1; Derived d2(10);}

Page 7: Order of Constructor Call. Base class constructors are always called in the derived class constructors. Whenever you create derived class object, first

Base class Default Constructor in Derived class Constructors

• You will see in the above example that with both the object creation of the Derived class, Base class's default constructor is called.

Page 8: Order of Constructor Call. Base class constructors are always called in the derived class constructors. Whenever you create derived class object, first

Output of the program

Base default constructorBase default constructorDerived default constructorBase default constructorDerived parameterized constructor

Page 9: Order of Constructor Call. Base class constructors are always called in the derived class constructors. Whenever you create derived class object, first

Base class Parameterized Constructor in Derived class Constructor

• We can explicitly mention to call the Base class's parameterized constructor when Derived class's parameterized constructor is called.

Page 10: Order of Constructor Call. Base class constructors are always called in the derived class constructors. Whenever you create derived class object, first

class Base{ int x; public: Base(int i) { x = i; cout << "Base Parameterized Constructor“<<endl; }};

Page 11: Order of Constructor Call. Base class constructors are always called in the derived class constructors. Whenever you create derived class object, first

class Derived : public Base{ int y; public: Derived(int j) : Base(j) { y = j; cout << "Derived Parameterized Constructor“<<endl; }};

Page 12: Order of Constructor Call. Base class constructors are always called in the derived class constructors. Whenever you create derived class object, first

int main(){ Derived d(10) ;}

Page 13: Order of Constructor Call. Base class constructors are always called in the derived class constructors. Whenever you create derived class object, first

Output

Base Parameterized ConstructorDerived Parameterized Constructor

Page 14: Order of Constructor Call. Base class constructors are always called in the derived class constructors. Whenever you create derived class object, first

Why is Base class Constructor called inside Derived class ?

• Constructors have a special job of initializing the object properly.

• A Derived class constructor has access only to its own class members, but a Derived class object also have inherited property of Base class, and only base class constructor can properly initialize base class members.

• Hence all the constructors are called, else object wouldn't be constructed properly.

Page 15: Order of Constructor Call. Base class constructors are always called in the derived class constructors. Whenever you create derived class object, first

Constructor call in Multiple Inheritance

• Its almost the same, all the Base class's constructors are called inside derived class's constructor, in the same order in which they are inherited.

class A : public B, public C ;

// figure out the order in which the contructors get called.

Page 16: Order of Constructor Call. Base class constructors are always called in the derived class constructors. Whenever you create derived class object, first

• In this case, first class B constructor will be executed, then class C constructor and then class A constructor.