Chapter 3 – Object-Oriented Programming: Part 2
Inheritance is one of the core concepts of object-oriented programming (OOP) languages. It is a mechanism where you can derive a class from another class for a hierarchy of classes that share a set of attributes and methods.
This is called a “is-a” relationship => a Car is a Vehicle, a Bus is a Vehicle.
With inheritance, we can make sure that we write code in only one place, and we inherit in derived classes.
Here, both FirstClass and SecondClass have a data variable of type int in their class, and can call the execute function.
This is called private inheritance – is also the default access modifier when inheriting classes (see 2nd line, where we skip the private keyword).
This is a “has-a” relationship – a Car has an Engine.
Composition over inheritance
Assuming we have the following base class:
We can either inherit privately from it, and use the method directly =>
Or we can use composition, and use the method through the object itself.
Ideally, we should always prefer composition over inheritance.
To the caller of the car, nothing changes.
Construction / Destruction order
What will be displayed when creating a Derived object? What about when it is destroyed?
When we create a Derived object, the constructor of the base class is called first – the construction starts from the base to the top (Base Derived).
When we destroy a Derived object, the destructor of the derived class is called first – the destruction starts from the top to the base (~Derived ~Base)