🤔 Какие есть виды полиморфизма?



В программировании, включая C++, полиморфизм (многоформенность) – это способность объекта или функции принимать разные формы. Полиморфизм является ключевой концепцией объектно-ориентированного программирования (ООП).



🚩Компиляторный (статический) полиморфизм



Этот вид полиморфизма реализуется во время компиляции. Он достигается с помощью перегрузки функций (function overloading) и перегрузки операторов (operator overloading).



🟠Перегрузка функций

В перегрузке функций одна функция имеет несколько определений с разными параметрами.

#include <iostream>



void print(int value) {

std::cout << "Целое число: " << value << std::endl;

}



void print(double value) {

std::cout << "Вещественное число: " << value << std::endl;

}



void print(const std::string& value) {

std::cout << "Строка: " << value << std::endl;

}



int main() {

print(42); // Вызов функции для int

print(3.14); // Вызов функции для double

print("Привет!"); // Вызов функции для строки

return 0;

}




🟠Перегрузка операторов

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

#include <iostream>



class Complex {

double real, imag;

public:

Complex(double r, double i) : real(r), imag(i) {}



Complex operator+(const Complex& other) const {

return Complex(real + other.real, imag + other.imag);

}



void display() const {

std::cout << real << " + " << imag << "i" << std::endl;

}

};



int main() {

Complex c1(1.0, 2.0), c2(3.0, 4.0);

Complex c3 = c1 + c2; // Используется перегрузка оператора +

c3.display(); // Вывод: 4 + 6i

return 0;

}




🚩Рантаймный (динамический) полиморфизм



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



Виртуальные функции

#include <iostream>



class Animal {

public:

virtual void sound() const { // Виртуальная функция

std::cout << "Некоторый звук" << std::endl;

}

};



class Dog : public Animal {

public:

void sound() const override { // Переопределение

std::cout << "Гав-гав" << std::endl;

}

};



class Cat : public Animal {

public:

void sound() const override { // Переопределение

std::cout << "Мяу" << std::endl;

}

};



void makeSound(const Animal& animal) {

animal.sound(); // Динамическое определение, какой sound() вызывать

}



int main() {

Dog dog;

Cat cat;



makeSound(dog); // Вывод: Гав-гав

makeSound(cat); // Вывод: Мяу

return 0;

}




Ставь 👍 и забирай 📚 Базу знаний