Insight into advanced C++ OOP
Source and Header
The reasons to separate are:
- To improve build times. Faster recompiles: If your implementation is split up into separate compilation units, you only need to recompile the ones that change when making edits.
- To link against code without having the source for the definitions.
- To avoid marking everything “inline”.
Polymorphism in C++
Compile time polymorphism
Function/Operator Overloading
Runtime polymorphism
Function overriding on the other hand occurs when a derived class has a definition for one of the member functions of the base class.
To avoid ambiguity error when multiple inheritence.
Virtual functions are functions that can be overridden in derived class with the same signature.
Virtual functions enable run-time polymorphism in a inheritance hierarchy.
If a function is ‘virtual’ in the base class, the most-derived class’s implementation of the function is called according to the actual type of the object referred to, regardless of the declared type of the pointer or reference. In non-virtual functions, the functions are called according to the type of reference or pointer.
Static functions are class specific and may not be called on objects. Virtual functions are called according to the pointed or referred object.
Virtual function has a VPTR that poccesses some memory.
A member function can be virtual even if we have not uses virtual keyword with it. When a class has a virtual function, functions with same signature in all descendant classes automatically become virtual. We don’t need to use virtual keyword in declaration of fun() in B and C. They are anyways virtual.
A base class function can be accessed with scope resolution operator even if the function is virtual.