Примеры полиморфизма в C++

Функция Vector Insert () в C++ Программирование и разработка

Полиморфизм, подразумевающий «различные формы», возникает, когда несколько классов связаны наследственностью. В разных контекстах одна и та же вещь (метод или оператор) действует по-разному. Мы можем наследовать свойства и функции от какого-то другого класса по наследству. Полиморфизм использует эти методы для различных целей. Это позволяет нам выполнять конкретную деятельность различными способами. Поэтому в этой статье мы обсудим примеры полиморфизма в C++ на некоторых примерах из Ubuntu 20.04. Мы начали его с создания и запуска нового файла C++ в консоли терминала.

touch polymorphism.cc
nano polymorphism.cc

Пример 1: Перегрузка функции

Когда их аргументы уникальны, вы можете использовать две основные функции с одинаковым названием в C++. Различные методы вызываются в зависимости от количества и типа параметров, и эта концепция известна как перегрузка функций. Мы начали наш первый пример со стандартного пространства имен «Std» и заголовка ввода-вывода «iostream». Определены три определяемые пользователем функции «val» с одинаковыми именами, каждая из которых содержит один оператор cout. Первая функция содержит параметр целочисленного типа, вторая содержит параметр типа double, а последняя содержит два параметра типа double. Первые две функции «val» просто получают значение из метода main() и отображают его в оболочке с помощью оператора cout. Третий — получение двух значений двойного типа из функции main() и отображение суммы обоих значений в оболочке с помощью предложения cout.

#include <iostream>
using namespace std;
int val(int n1) {
cout <<«Integer: «<< n1 <<endl;
}
double val(double n1){
cout <<«Double: «<< n1 <<endl;
}
double val(double n1, double n2) {
cout << «Sum: «<< n1+n2<<endl;
}
int main() {
val(10);
val(9.25);
val(4.18.23);
return 0;
}

Компиляция этого кода C++ выполняется успешно с помощью компилятора G++ в оболочке.

g++ polymorphism.cc

Компиляция этого кода C++ выполняется успешно с помощью

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

./a.out

выполнения кода у нас есть значения, отображаемые

Пример 2: Перегрузка оператора

Перегрузка операторов похожа на перегрузку методов, поскольку она использует один и тот же знак, но разные операнды для разных методов операторов. Итак, мы начали этот пример с объявления нового класса «A» после пространства имен и библиотеки заголовков. Класс A содержит закрытый элемент данных целочисленного типа «v» и функцию-конструктор A(), используемую для инициализации переменной «v» значением 5. Вот операторная функция для увеличения значения «v» на 3. Как видно из названия, оператор «+» здесь перегружен. Функция show() предназначена для отображения увеличенного значения переменной «v». При создании объекта будет выполнен конструктор A(). Объект использовался для вызова операторной функции «++». Объект obj снова используется для вызова функции show() для отображения увеличенного значения.

#include <iostream>
using namespace std;
class A {
private:
int v;
public:
A() : v(5) {}
void operator ++() {
v = v + 3;
}
void show() {
cout << «Value after increment: « << v << endl;
}
};
int main() {
A obj;
++obj;
obj.show();
return 0;
}

После компиляции ошибок нет. Увеличенное значение переменной «v» отображалось на экране нашего терминала после запуска этого кода.

g++ polymorphism.cc
$ ./a.out

Пример 3: Переопределение функции

Базовый класс и его подклассы-потомки могут иметь методы с одинаковыми именами. Когда мы используем экземпляр из подкласса для вызова метода, запускается функция расширенного класса, а не родительского класса. В результате различные функции будут выполняться в зависимости от объекта, вызывающего метод. В C++ это называется переопределением метода. Итак, мы инициализировали в коде три класса. Класс A является родительским классом для дочерних классов B и C. Все классы имеют функцию с одинаковым именем «show()», которая отображает свои спецификации с помощью оператора cout. Метод main() создал 3 объекта для 3 классов для вызова соответствующих функций.

#include <iostream>
using namespace std;
class A {
public:
void show() {
cout << «Base class A… « << endl;
}};
class B : public A {
public:
void show() {
cout << «Derived class B… « << endl;
}};
class C : public A {
public:
void show() {
cout << «Derived class C… « << endl;
}};
int main() {
A o1;
o1.show();
B o2;
o2.show();
C o3;
o3.show();
return 0;
}

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

ас есть все методы, выполняемые из всех классов при за

Пример 4: Виртуальные функции

Если мы используем «указатель» ссылки на базовый класс для ссылки на объект производного класса, мы даже не сможем обойти методы в C++. В этих обстоятельствах использование виртуальных методов в родительском классе гарантирует возможность переопределения метода. Итак, мы создали родительский класс A с его дочерним классом B. Оба класса имеют одинаковые имена функций, но функция родительского класса содержит ключевое слово «виртуальный». В main() объект класса B «b» используется в качестве ссылки на объект-указатель родительского класса «A» «a».

#include <ostream>
using namespace std;
class A {
public:
virtual void show() {
cout << «Base class A…» << endl;
}
};
class B : public A {
public:
void show() {
cout << «Derived class B…» <show();
return 0;
}

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

g++ polymorphism.cc
$ ./a.outg

Заключение

Это было все об использовании полиморфизма в C++ с использованием некоторых его основных концепций. Чтобы упростить задачу, мы рассмотрели перегрузку функций, переопределение функций, перегрузку операторов и концепцию виртуальных функций. Мы надеемся на лучшие отзывы об этой работе.

Читайте также:  PHP фреймворки: какой фреймворк выбрать, популярные фреймворки
Оцените статью
bestprogrammer.ru
Добавить комментарий