ВВЕДЕНИЕ ДЛЯ ОПЕРАТОРА:

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

ЗНАЧЕНИЕ ОПЕРАТОРА:

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

ВИДЫ ПЕРЕГРУЗКИ:

Существует два основных типа перегрузки:

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

2. Перегрузка оператора.

Значение перегрузки функции:

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

o Три причины перегрузки функций:

а. Преобразование типов.

б. Функция с аргументами по умолчанию.

c. Функция с передачей по ссылке.

Фактическое значение перегрузки оператора:

В C ++ он может загружать уникальные функции в Функциональность и поведение уже существующих операторов, таких как атематические и другие операции. Механизм предоставления уникального средства оператору называется перегрузкой оператора. Например, мы можем перегрузить оператор «+» в категории, такой как строка, для объединения строк, просто используя +.

Операции, которые можно выполнять:

1. Атематические операции: + - * /%

2. Логические операции: && и ||

3. Операции с отношениями: ==! = ›=‹ =

4. Операторы-указатели: & и *

5. Оператор управления памятью: новое, удаление []

РЕАЛИЗАЦИЯ ПЕРЕГРУЗКИ ОПЕРАТОРА:

o Функции оператора и обычные функции:

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

1. Функция-член:

Он находится в области видимости класса, в котором он объявлен далеко. Функция перегрузки оператора может быть функцией-членом, в то время как левый операнд является объектом класса.

2. Дружественная функция:

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

3. Функция, не являющаяся членом:

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

Разница между функцией члена и друга:

· Функция-член:

1. Количество передаваемых параметров уменьшается на один, поскольку вызывающему объекту неявно предоставляется операнд .

2. В сказках унарного оператора нет явных параметров.

3. Бинарные операторы принимают только один явный параметр.

· Функция дружбы:

1. Можно передать большее количество параметров.

2. Унарные операторы принимают один явный параметр.

3. Бинарные операторы принимают два явных параметра.

ПРАВИЛА ПЕРЕГРУЗКИ ОПЕРАТОРА:

1. Для работы как минимум один из операндов должен быть описываемым пользователем объектом класса. 2. Мы можем перегрузить существующие операторы, но не можем перегрузить новые операторы.

3. Некоторые операторы не могут быть перегружены использованием функции друга. Однако такие операторы могут быть перегружены использованием функции-члена.

v ОПЕРАТОРЫ C ++, КОТОРЫЕ НЕ ПЕРЕГРУЖАЮТСЯ:

§ Оператор разрешения области видимости (::)

§ Тернарный оператор (?)

§ Селектор элементов (.)

§ Размер оператора

§ Селектор указателя элемента (*)

НЕДОСТАТКИ ПЕРЕГРУЗКИ ОПЕРАТОРА:

При перегрузке операторов любые существующие операции C ++ могут быть перегружены, но здесь есть некоторые исключения:

1. Условный [? :], размер, область действия (: :), селектор элемента (.), селектор указателя элемента (. *) и операторы приведения типов.

2. Мы можем только перегрузить уже существующие операторы и не можем создавать новые операторы или переименовывать существующие операторы.

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

4. Невозможно изменить количество операндов, поддерживаемых оператором.

5. Все операторы сохраняют свой приоритет по умолчанию и ассоциации (для чего они используются), которые нельзя изменить.

6. Перегружать можно только встроенные операторы.

ПРЕИМУЩЕСТВА ПЕРЕГРУЗКИ ОПЕРАТОРА:

1. Перегрузка операторов позволяет программистам использовать нотацию ближе к целевой области.

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

3. Перегрузка оператора упрощает понимание программы.

НЕОБХОДИМОСТЬ ПЕРЕГРУЗКИ ОПЕРАТОРА:

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

o С помощью перегрузки оператора мы можем переопределить способ работы оператора только для определенных пользователем типов (объектов, структур). Мы не можем использовать его для встроенных типов (float, char, int и т. Д.).

o Операторы = и & C ++ по умолчанию перегружены. Например, мы можем скопировать объекты одного и того же класса напрямую с помощью оператора =.

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

o Есть четыре оператора, которые мы не можем перегрузить в C ++. Они включают в себя оператор разрешения области (: :), оператор выбора члена (.), Выбор члена с помощью указателя на оператор функции (. *) И тернарный оператор (? :).

· Синтаксис для перегрузки оператора:

Класс class_name

{

………………….

…………………..

Общественные

Символ оператора return_type (аргумент ())

{

……………….

……………….

}

………………………….

};

Программа для объяснения синтаксиса выше:

#include ‹iostream›

с использованием пространства имен std;

класс TestClass {

личное:

int count;

общедоступный:

TestClass (): count (5) {}

оператор void - () {

count = count - 3;

}

void Display () {

cout ‹< «Count:« ‹< count; }

};

int main () {

TestClass tc;

— tc;

tc.Display ();

return 0;

}

ПЕРЕГРУЗКА СПЕЦИАЛЬНЫХ ОПЕРАТОРОВ:

Вот некоторые из специальных операторов C ++:

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

II. Удалить: используется для динамического освобождения памяти.

iii. [] : это оператор нижнего индекса.

iv. - ›-: Это операторы доступа к участникам.

v. =: Используется для присвоения значений.

vi. (): используется для вызова функции.

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

A. Симметрия:

Когда бинарный оператор определяется как метод класса, он должен иметь объекты в качестве операндов. Мы должны писать как комплексный * 5, но не как 5 * сложный, потому что 5. оператор * (комплексный) не имеет никакого смысла. Другими словами, a * b должно быть таким же, как b * a. В противном случае это нарушает кумулятивность, которую пользователь ожидает от оператора *. Итак, в этом случае мы должны использовать перегрузку операторов без членов.

Б. Слабая связь:

Метод, не являющийся членом, не может получить доступ к закрытому члену, он имеет тенденцию делать класс менее связанным

ТЕХНИЧЕСКИЕ ХАРАКТЕРИСТИКИ ДОСТУПА:

Каждый член класса определяется 3 уровнями защиты доступа. Они используются для определения области действия членов класса.

Спецификаторы доступа указываются с помощью ключевых слов:

1. Частный

2. Общественные

3. Защищено

o ЧАСТНЫЙ:

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

o ПУБЛИЧНЫЙ:

Это означает, что к членам может обращаться любая функция внутри или вне класса, но внутри программы. Доступ к частной переменной height осуществляется через функцию-член. Некоторые общедоступные функции класса предоставляют интерфейс для доступа к закрытым и защищенным членам класса.

o ЗАЩИЩЕНО:

Члены класса этого раздела доступны функциям-членам того же класса, друзьям класса и функциям-членам, производным от этого класса. К членам нельзя получить доступ извне; Это похоже на закрытые члены.

ПЕРЕГРУЗКА ОПЕРАТОРА:

· Перегрузка унарных операторов

· Перегрузка бинарных операторов

· Перегрузка операторов отношения

· Перегрузка операторов ввода / вывода

· ++ и - Перегрузка операторов

· Перегрузка операторов присваивания

· Перегрузка оператора вызова функции ()

· Перегрузка оператора Subscripting []

· Оператор доступа к членам класса - ›Перегрузка

ПЕРЕГРУЗКА УНАРНОГО ОПЕРАТОРА:

Унарные операторы работают с одним операндом, и ниже приведены примеры унарных операторов:

Ø Операторы инкремента (++) и декремента (-).

Ø унарный оператор минус (-).

Ø оператор логического НЕ (!).

Унарные операторы работают с объектом, для которого они были вызваны, и обычно этот оператор появляется слева от объекта, как в! Obj, -obj и ++ obj, но иногда их можно использовать как постфикс, а также как obj ++ или obj -.

o ПРОГРАММА:

// Перегрузка ++ при использовании в качестве префикса

#include ‹iostream›

using namespace std;

количество классов {

закрытый:

значение int;

общедоступный:

// Конструктор для инициализации счетчика до 5

Count (): value (5) {}

// Перегрузка ++ при использовании в качестве префикса

void operator ++ () {

++ значение;

}

void display () {

cout ‹< «Count:« ‹* value ‹< endl;

}

};

int main () {

Count count1;

// Вызов функции «void operator ++ ()»

++ count1;

count1.display ();

возврат 0;

}

o ВЫХОД:

Счет ++

ПЕРЕГРУЗКА ДВОИЧНОГО ОПЕРАТОРА:

Бинарные операторы принимают два аргумента, и ниже приведены примеры бинарных операторов.

Ø оператор сложения (+),

Ø оператор вычитания (-)

Ø оператор деления (/).

ПЕРЕГРУЗКА ОТНОСИТЕЛЬНОГО ОПЕРАТОРА:

В языке C ++ поддерживаются различные операторы отношения, такие как ‹,›, ‹=,› =, == и т. Д., Которые можно использовать для сравнения встроенных типов данных C ++. Мы можем использовать эти операторы для сравнения объектов класса.

ПЕРЕГРУЗКА ОПЕРАТОРА ВХОДА / ВЫХОДА:

C ++ может вводить и выводить встроенные типы данных с помощью оператора извлечения потока ›› и оператора вставки потока ‹

Het важно сделать функцию перегрузки оператора другом класса, потому что она будет вызываться без создания объекта.

ПЕРЕГРУЗКА ОПЕРАТОРА НАЗНАЧЕНИЯ:

Мы можем перегрузить оператор присваивания (=) так же, как и другие операторы, и его можно использовать для создания объекта так же, как конструктор копирования.

Вызов функции () ПЕРЕГРУЗКА ОПЕРАТОРА:

Оператор вызова функции () может быть перегружен для объектов типа класса. Когда мы overload (), мы не создаем новый способ вызова функции. Скорее, мы создаем операторную функцию, которой можно передать произвольное количество параметров.

ПОДПИСКА ОПЕРАТОРА ПЕРЕГРУЗКА:

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

ПЕРЕГРУЗКА ОПЕРАТОРА ДОСТУПА ДЛЯ ЧЛЕНОВ КЛАССА:

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

Ссылки: -

1. https://programsolve.com/cpp-program-to-implement-the-concept-of-binary-operator-overloading/

2. https://www.tutorialspoint.com/cplusplus/unary_operators_overloading.htm

3. https://www.tutorialspoint.com/cplusplus/relational_operator



написано:-

Аюш Кагане, Сиддхеш Кале