In C++, function overloading and function overriding provides a way to achieve Polymorphism concept ( ability to take multiple forms) which is one of the OOP’s feature.
The main difference is, Function Overloading enables us to define multiple functions with a similar name within the same class, whereas Function overriding allows us to redefine a method having same name and signature in inheriting class.
Difference between Function Overloading and Function Overriding in Tabular form :
Basis | FUNCTION OVERLOADING | FUNCTION OVERRIDING |
---|---|---|
Definition | It allows us to declare two or more function having same name with different number of parameters or different datatypes of argument | It allows us to declare a function in parent class and child class with same name and signature |
Inheritance Concept | It can occur without inheritance concept | Overriding can only be done when one class is inherited by other class |
Signature | The overloaded functions must have different signature, for example, either the number of parameters or sort of parameters should be different | Function signatures must have same |
Polymorphism Type | It is an example of compile-time Polymorphism | It is an example of run-time Polymorphism |
Scope | The overloaded functions are always in the same scope | Functions are always in a different scope |
Purpose | Overloading is utilized to have the same names of various functions which act distinctively relying on parameters handed over to them | Overriding is required when a determined class function needs to perform some additional or unexpected job in comparison to the base class function |
Accomplish | Overloading is accomplished at compile time | Overriding is accomplished at runtime |
Constructor | A constructor can be overloaded | A constructor cannot be overridden |
Usage | A function can be overloaded any number of times | A function can be overridden only single time in the respective inheriting class |
Function Overloading
Function overloading is a form of static polymorphism where at least two functions can have a similar name with different arguments and can be considered as an instance of polymorphism.
In other words, functions with a similar name but having a different number of parameters or types of arguments are said to function overloading.
A compiler calls correct function out of others on the basis of their number of parameters or datatypes in arguments.
However, changing only the return type of the function and keeping parameters and other aspects the same would make compiler confuse in choosing the correct function.
Function Overriding
Function overriding is a form of dynamic polymorphism that enables us to have an equivalent function in child class which is already defined in the parent class.
A child class acquires member variables and member functions of its parent class. When there is a need to override the functionality of the parent’s member function then we use the concept of function overriding.
It resembles making another adaptation of an old method, in the child class.
If we talk about C++, a virtual keyword or non-virtual way (without writing the virtual keyword in front of function) in order to achieve function overriding.
C++ program to show Function Overloading :
#include <iostream> using namespace std; class Shape{ public: // area() function to calculate area of square void area(int side) { cout<<"Area of square :"<< side*side; } // Overloading area() function to calculate area of rectangle void area(int len, int width) { cout<<"Area of Rectangle :"<< len * width<<"\n"; } }; int main() { Shape obj; cout<<"Example of function overloading \n"; obj.area(10); // Calling it to calculate square area cout<<"\n"; obj.area(5,10); // Calling it to calculate rectangle area return 0; }
Output:
Area of square :100 Area of Rectangle :50
Explanation:
Here in the above example, area function was overloaded, one for calculating square’s area and the second one for calculating the rectangle’s area.
C++ program to show Function Overriding:
#include <iostream> using namespace std; // Parent class class Shape{ public: void display(){ cout<<" I am base class"; } }; // Child Class class Rectangle: public Shape { public: void display(){ cout<<"I am overriding display function of parent class \n"; } }; int main() { Rectangle obj; cout<<"Example of function overriding \n"; obj.display(); return 0; }
Output:
Example of function overriding I am overriding display function of parent class
Explanation:
Here, we overrode the display method, enabling us to define or redefine the body of that function in the child class.
[Related Article: Difference between method overloading and method overriding in Java]