Полиморфизм — это фундаментальная концепция объектно-ориентированного программирования (ООП), которая позволяет рассматривать объекты разных классов как объекты из общего базового класса. Поскольку слово «полиморфизм» означает множество форм.
Примером полиморфизма в реальной жизни являются женщины, обладающие одновременно разными характеристиками. Полиморфизм способствует гибкости и расширяемости вашего кода, а также повышает возможность повторного использования кода.
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 в базовом классе. Прототип этих функций должен быть одинаковым как в базовом, так и в производном классе.