Полиморфизм — это фундаментальная концепция объектно-ориентированного программирования (ООП), которая позволяет рассматривать объекты разных классов как объекты из общего базового класса. Поскольку слово «полиморфизм» означает множество форм.

Примером полиморфизма в реальной жизни являются женщины, обладающие одновременно разными характеристиками. Полиморфизм способствует гибкости и расширяемости вашего кода, а также повышает возможность повторного использования кода.

C++ поддерживает два типа полиморфизма:

Полиморфизм времени компиляции. Этот тип полиморфизма может быть достигнут за счет перегрузки функций и перегрузки операторов.

Перегрузка функций. Когда имеется несколько функций с одинаковыми именами, но разными параметрами, говорят, что функции перегружены, отсюда и название "перегрузка функций".

Правильная функция для выполнения выбирается компилятором на основе количества и типов аргументов на этапе компиляции.

Например:

Class operations {
public:
int add(int x , int y){
cout<< "addition:"<<x+y;
}
double add(int x , int y){
cout<<"addition"<<x+y;
}
};
int main{
operations obj1;
int res1 = obj1.add(3,5); //will call int function
int res2 = obj2.add(3.5 , 2.5); //will call double function
return 0;
}

Перегрузка операторов: позволяет переопределить поведение операторов для пользовательских классов. Например, мы можем использовать оператор «+» с целыми числами, чтобы сложить их, а с другой стороны, мы можем использовать оператор with для их объединения. Он может добавить дополнительные возможности уже существующему оператору.

Полиморфизм во время выполнения: достигается за счет переопределения функций.

При полиморфизме времени выполнения вызов функции разрешается во время выполнения. Это также называется динамическим полиморфизмом.

Переопределение функции: определяется как процесс, в котором функция, определенная в базовом классе, снова определяется в производном классе.

Наследование необходимо для переопределения .

Например:

class base_class{
    public:
    virtual void display() {
        cout<<"Function written in base class"<<endl;
    }
};
class derived_class : public base_class {
    public:
    void display() {
        cout<<"Function written in derived class"<<endl;
    }
};

int main() {
  derived_class d;
  d.display();
  return 0;
}

Виртуальные функции: это те функции, которые написаны в базовом классе, а затем переопределены или переопределены производным классом. Функции объявляются с ключевым словом virtual в базовом классе. Прототип этих функций должен быть одинаковым как в базовом, так и в производном классе.