Что такое перегрузка в C ++?

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

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

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

Как перегрузка работает в C ++?

  • Перегрузка функций: позволяет определить функцию с тем же именем, но она различает функции в зависимости от типа передаваемых им параметров или количества передаваемых им параметров. Таким образом, все функции будут иметь одинаковые имена, но будут иметь разные типы данных или будут иметь разное количество параметров, передаваемых ему. Когда функция вызывается, компилятор выбирает функцию с совпадающим типом параметра и количеством аргументов. Теперь его разработчики могут выбирать, какую функцию вызывать в соответствии с требованиями. Они могут выбрать подходящую функцию, передав параметры в соответствии с правилами.
  • Перегрузка операторов: позволяет операторам работать с пользовательскими типами данных, т.е. с классами. Существующие операторы перегружены и имеют возможность работать с пользовательским классом и объектами. Перегрузка оператора достигается путем определения функции со специальным именем. Функция будет иметь имя «оператор», за которым следует символ оператора. Мы можем использовать символ оператора непосредственно в определяемом пользователем типе данных и выполнять операцию. Необходимое действие или операция определяется нами в этой специальной функции. С помощью перегрузки операторов мы можем выполнять операции разных типов с одним и тем же типом данных.

Типы перегрузки в C ++

Перегрузка функций может быть достигнута в любом случае с точки зрения использования параметров. Когда мы говорим об использовании параметров, это относится к типу параметров или количеству параметров или последовательности параметров. Таким образом, функция calc (int x, float y), имеющая параметры (int x, float y), отличается от функции, определенной как calc (float x, int y), которая имеет разные параметры с различным типом данных.

Может быть несколько типов, в которых может быть достигнута перегрузка функций. Давайте рассмотрим простой пример перегрузки функций в C ++.

#include
using namespace std;
class Display (
public:
static void show (char message() ) (
cout<< "Only Message:" << message << endl;
)
static void show (int messageId, char message()) (
cout<< "Message with Id:";
cout << messageId << " Message:" << message << endl;
)
);
int main (void) (
Display obj;
char message() = "Welcome";
int messageId = 10;
obj.show(message); //calling overloaded function with 1 parameter
obj.show(messageId, message);//calling overloaded function with 2 parameters
return 0;
)

Здесь у нас есть класс Display, у которого есть перегруженный метод show. Метод show будет вызываться в зависимости от переданных ему аргументов.

Выход:

Только сообщение: Добро пожаловать

Сообщение с Id: 10 Сообщение: Добро пожаловать

Перегрузка оператора может быть достигнута почти для всех встроенных типов данных, доступных в C ++. Нет таких разных типов перегрузки операторов, но могут быть разные подходы, которые используются для достижения перегрузки операторов. Такие операторы, как Unary, Binary, Relational, Assignment и т. Д. Могут быть перегружены в C ++.

Давайте посмотрим на простой пример перегрузки оператора ++. В этом примере вместо примитивного типа данных мы будем использовать оператор ++ для пользовательского объекта класса.

#include
using namespace std;
class Bike (
private:
int height;
public:
Bike (): height (80) () //constructor which initializes the height variable
void operator ++() (
height = height + 5;
)
void Specs () (
cout << "The height of the bike is: " < )
);
int main(void)
(
Bike bike;
bike.Specs();
++bike; //calling overloaded operator
bike.Specs();
return 0;
)
#include
using namespace std;
class Bike (
private:
int height;
public:
Bike (): height (80) () //constructor which initializes the height variable
void operator ++() (
height = height + 5;
)
void Specs () (
cout << "The height of the bike is: " < )
);
int main(void)
(
Bike bike;
bike.Specs();
++bike; //calling overloaded operator
bike.Specs();
return 0;
)

Итак, у нас есть объект, начальная высота которого будет установлена ​​на 80 и будет увеличена на 5, когда мы вызовем над ним оператор ++.

Выход:

Высота велосипеда составляет: 80
Высота велосипеда составляет: 85

Правила перегрузки в C ++

Ниже приведены различные правила перегрузки C ++:

Правила перегрузки функций

  • При перегрузке функции функция должна отличаться в зависимости от типа данных, количества или последовательности параметров. Он не может отличаться просто на основе возвращаемого типа функции.

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

  • Только встроенные операторы могут быть перегружены, новые операторы не могут быть перегружены.
  • Есть четыре оператора, которые не могут быть перегружены, это . (выбор элемента), :: (разрешение области), . * (выбор элемента с использованием указателя на функцию) и?: (троичный оператор).
  • Перегруженный оператор будет содержать хотя бы один операнд определенного пользователем типа данных.
  • Существуют определенные операторы, которые нельзя перегрузить с помощью функции друга, но они могут быть перегружены как функция-член.

Вывод

Таким образом, перегрузка в C ++ является уникальной функцией, которая дает нам множество преимуществ. Существует в основном два типа перегрузки: перегрузка функций и перегрузка операторов. Перегрузка функций улучшает читаемость кода, сохраняя одно и то же имя для одного и того же действия. Перегрузка операторов позволяет переопределить существующие функциональные возможности операторов, придав им особое значение. Оба очень полезны при программировании на C ++.

Рекомендуемые статьи

Это руководство по перегрузке в C ++. Здесь мы обсудим его работу, правила и два типа перегрузки в c ++, т.е. перегрузку функций и перегрузку операторов. Вы также можете посмотреть следующую статью, чтобы узнать больше -

  1. Перегрузка в PHP
  2. Копировать конструктор в C ++
  3. Перегрузка против Переопределения
  4. Оператор переключения в C ++
  5. Перегрузка в Java
  6. Перегрузка Python