C++ Pure Polymorphism
Lesson 3 | Virtual member functions and pure polymorphism |
Objective | Virtual member functions and how they are used. |
Virtual member functions
C++ supports
virtual member functions.
These are functions declared in the base class and redefined in a derived class. When a virtual member function is redefined, it is overridden as opposed to overloaded. We will look at the difference between overriding and overloading later in this module.
For now, just think of the difference as semantic.
- Virtual member functions can be overridden, and
- nonvirtual member functions can be overloaded.
A class hierarchy that is defined by inheritance creates a related set of user-defined types, all of whose objects may be pointed at by a base class pointer. By accessing the virtual function through this pointer, C++ selects the appropriate function definition at runtime.
This is a form of polymorphism called
pure polymorphism.
OOP Design Methodology
Inheritance should be designed into software to maximize reuse and to allow a natural modeling of the problem domain.
The key elements of the OOP design methodology are as follows:
- Decide on an appropriate set of types.
- Design in their relatedness, and use inheritance to share code.
- Use virtual functions to process related objects polymorphically.
Polymorphism
Polymorphism is the provision of a single interface to entities of different types.
A polymorphic type is a type whose operations can also be applied to values of some other type or types.
There are several fundamentally different kinds of polymorphism.
If a function denotes different and potentially heterogeneous implementations depending on a limited range of individually specified types and combinations, it is called
ad hoc polymorphism.
Ad hoc polymorphism[1] is supported in many languages using function overloading.
Polymorphism allows you to take advantage of the commonality between related classes, while still giving each class the flexibility to implement specific behavior. Using polymorphism, it is possible to build very flexible and extensible systems. Polymorphism (literally, having multiple shapes) describes a set of objects of different classes with similar behavior.
[1]ad hoc polymorphism: In programming languages, ad hoc polymorphism is a kind of polymorphism in which polymorphic functions can be applied to arguments of different types. A polymorphic function can denote a number of distinct implementations depending on the type of arguments to which it is applied.