Polymorphism in C++
Polymorphism is a Greek word that means “many shapes.” In the context of programming, it refers to the ability of different objects to respond to the same function or method call in a way that’s specific to their individual types. This concept is closely tied to inheritance, where a subclass can inherit properties and behaviors from a superclass.
At its core, polymorphism allows you to write code that can work with objects of multiple classes in a uniform manner. This promotes code reusability, maintainability, and extensibility.
In the below PDF we discuss about Polymorphism in detail in simple language, Hope this will help in better understanding.
Types of Polymorphism in C++:
C++ supports two main types of polymorphism:
1.Compile-time (Static) Polymorphism:
This type of polymorphism is resolved at compile-time. It occurs when the compiler determines which method or function to call based on the function signature and the context in which it is used. Compile-time polymorphism is achieved through function overloading and operator overloading.
a.Function Overloading:
In function overloading, multiple functions with the same name but different parameter lists are defined within the same scope. The compiler decides which function to call based on the number and types of arguments passed.
int add(int a, int b);
double add(double a, double b);
b.Operator Overloading:
Operator overloading involves defining new behaviors for existing operators, such as +, -, or =. The compiler selects the appropriate overloaded operator function based on the operands.
Complex operator+(const Complex& a, const Complex& b);
2.Run-time (Dynamic) Polymorphism:
Run-time polymorphism is resolved at runtime. It is achieved through function overriding and is often associated with inheritance. In C++, this is implemented using virtual functions and the dynamic dispatch mechanism.
a.Virtual Functions:
A virtual function is a member function of a class that can be overridden by derived classes. It allows a subclass to provide its own implementation of the function while maintaining a common interface.
class Shape {
public:
virtual void draw() const {
// Base class implementation
}
};
class Circle : public Shape {
public:
void draw() const override {
// Subclass implementation
}
};
b.Dynamic Dispatch:
When calling a virtual function on a pointer or reference to a base class, C++ uses dynamic dispatch to determine the appropriate function to invoke at runtime based on the actual object’s type.
Shape* shapePtr = new Circle();
shapePtr->draw(); // Calls the draw() function of Circle class
Related Question
Polymorphism is a fundamental concept in object-oriented programming (OOP) that allows objects of different classes to be treated as objects of a common base class. It enables the same interface or function to exhibit different behaviors based on the actual object it operates on.
There are two main types of polymorphism in C++: compile-time (static) polymorphism and runtime (dynamic) polymorphism. Compile-time polymorphism is achieved through function overloading and operator overloading, while runtime polymorphism is achieved using virtual functions and inheritance.
Compile-time polymorphism, also known as static polymorphism, occurs when the decision about which function or method to call is made by the compiler at compile time based on the number or types of arguments. It is achieved through function overloading and operator overloading.
Function overloading in C++ is a form of compile-time polymorphism where multiple functions in the same scope have the same name but different parameter lists. The compiler selects the appropriate function to call based on the number and types of arguments passed during the function invocation
Relevant
Storage Classes in C++ In
Preprocessors in C++ A preprocessor
Standard Template Library in C++
Exception Handling in C++ Exception
Destructors in C++ A destructor
Constructors in C++ A constructor
Inheritance in C++ Inheritance is