Перегрузка оператора C++ с примерами
Что такое перегрузка оператора?
Использование перегрузки оператора в C++ вы можете указать более одного значения для оператора в одной области. Цель перегрузки оператора — предоставить особое значение оператора для пользовательского типа данных.
С помощью перегрузки операторов вы можете переопределить большинство операторов C++. Вы также можете использовать перегрузку операторов для выполнения различных операций с помощью одного оператора.
Из этого руководства по C++ вы узнаете:
- Что такое перегрузка оператора?
- Синтаксис
- Различные подходы к перегрузке операторов в C++
- Могут ли быть перегружены все операторы C++?
- Что следует помнить:
- Правила перегрузки операторов:
- Как перегрузить оператора:
Синтаксис
Чтобы перегрузить оператор C++, вы должны определить специальную функцию внутри класса следующим образом:
class class_name { ... .. ... public return_type operator symbol (argument(s)) { ... .. ... } ... .. ... };
Вот объяснение приведенного выше синтаксиса:
- Return_type — это тип возвращаемого значения для функции.
- Далее вы упоминаете ключевое слово оператора.
- Символ обозначает символ оператора, который необходимо перегрузить. Например, +, -, <, ++.
- Аргумент(ы) можно передать операторной функции так же, как функции.
Пример 1:
#include <iostream> using namespace std; class TestClass { private: int count; public: TestClass() : count(5) {} void operator --() { count = count - 3; } void Display() { cout << "Count: " << count; } }; int main() { TestClass tc; --tc; tc.Display(); return 0; }
Вывод:
Вот скриншот кода:
Пояснение кода:
- Включение файла заголовка iostream в наш код для использования его функций.
- Включите пространство имен std в нашу программу, чтобы использовать его классы, не вызывая его.
- Создайте класс TestClass.
- Используйте модификатор приватного доступа, который помечает член класса как доступный приватно.
- Создайте счетчик целочисленной переменной. Эта переменная будет доступна в частном порядке.
- Используйте модификатор общего доступа, который помечает член класса как доступный для частных лиц.
- Используйте конструктор класса, чтобы инициализировать счетчик переменной равным 5.
- Перегрузите значение оператора —.
- Оператор уменьшит значение переменной x на 1.
- Конец раздела перегрузки операторов. Оператору присвоено новое имя.
- Определение функции Display().
- Печать значения переменной count вместе с другим текстом на консоли при вызове функции Display(). } отмечает конец тела функции Display().
- Конец тела класса.
- Вызовите функцию main(). Логика программы должна быть добавлена в эту функцию.
- Создайте экземпляр класса TestClass и назовите его tc.
- Это вызовет функцию void operator –().
- Используйте позицию класса TestClass для вызова функции Display().
- Функция должна возвращать значение после успешного завершения.
- Конец тела функции main().
Различные подходы к перегрузке операторов в C++
Вы можете выполнять перегрузку операторов, реализуя любой из следующих типов функций:
- Функция члена
- Функция для нечленов
- Функция друга
- Функция перегрузки оператора может быть функцией-членом, если левый операнд является объектом класса.
- Если левый операнд отличается, функция перегрузки оператора должна быть функцией, не являющейся членом.
Вы можете сделать функцию перегрузки оператора дружественной функцией, если ей нужен доступ к закрытым и защищенным членам класса.
Могут ли быть перегружены все операторы C++?
Нет. Существуют операторы C++, которые нельзя перегружать.
К ним относятся:
- ::-оператор разрешения области
- ?:-тернарный оператор. <ли>. -селектор участников
- Оператор Sizeof
- * -селектор указателя на элемент
Что нужно помнить:
- С помощью перегрузки оператора вы можете переопределить способ работы оператора только для определенных пользователем типов (объектов, структур). Его нельзя использовать для встроенных типов (float, char, int и т. д.).
- Операторы =и &C++ по умолчанию перегружены. Например, вы можете напрямую копировать объекты одного и того же класса с помощью оператора =.
- Приоритет оператора не влияет на ассоциативность и приоритет операторов. Однако вы можете изменить порядок оценки, используя круглые скобки.
- Есть четыре оператора, которые нельзя перегружать в C++. К ним относятся оператор разрешения области (::), оператор выбора элемента (.), оператор выбора элемента с помощью указателя на оператор функции (.*) и тернарный оператор (?:).
Правила перегрузки оператора:
Вот правила перегрузки оператора:
- Чтобы это работало, хотя бы один операнд должен быть объектом пользовательского класса.
- Вы можете только перегружать существующие операторы. Вы не можете перегружать новые операторы.
- Некоторые операторы нельзя перегрузить с помощью дружественной функции. Однако такие операторы можно перегружать с помощью функции-члена.
Как перегрузить оператора:
Пример 1:
#include <iostream> using namespace std; class OperatorOverload { private: int x; public: OperatorOverload() : x(10) {} void operator ++() { x = x + 2; } void Print() { cout << "The Count is: " << x; } }; int main() { OperatorOverload ov; ++ov; ov.Print(); return 0; }
Вывод:
<сильный> сильный>
Вот скриншот кода:
<сильный> сильный>
Пояснение кода:
- Включение файла заголовка iostream в наш код для использования его функций.
- Включите пространство имен std в нашу программу, чтобы использовать его классы, не вызывая его.
- Создайте класс с именем OperatorOverload.
- Используйте модификатор приватного доступа, который помечает член класса как доступный приватно.
- Создайте целочисленную переменную x. Эта переменная будет доступна в частном порядке.
- Используйте модификатор общего доступа, который помечает член класса как доступный для частных лиц.
- Используйте конструктор класса, чтобы инициализировать переменную x значением 10.
- Перегружать значение оператора ++.
- Оператор увеличит значение переменной x на 2.
- Конец раздела перегрузки операторов. Оператору присвоено новое имя.
- Вызов функции Print().
- Вывести значение переменной x вместе с другим текстом на консоль при вызове функции Print().
- Конец тела функции Print().
- Конец тела класса.
- Вызовите функцию main(). Логика программы должна быть добавлена в эту функцию.
- Создайте экземпляр класса OperatorOverload с именем ov.
- Это вызовет функцию void operator ++().
- Используйте позицию класса OperatorOverload для вызова функции Print().
- Функция должна возвращать значение после успешного завершения.
- Конец тела функции main().
Пример 2:
#include<iostream> using namespace std; class TestClass { private: int real, over; public: TestClass(int rl = 0, int ov = 0) { real = rl; over = ov; } TestClass operator + (TestClass const &obj) { TestClass result; result.real = real + obj.real; result.over = over + obj.over; return result; } void print() { cout << real << " + i" << over << endl; } }; int main() { TestClass c1(9, 5), c2(4, 3); TestClass c3 = c1 + c2; c3.print(); }
Вывод:
Вот скриншот кода:
Пояснение кода:
- Включение заголовочного файла iostream в нашу программу для использования его функций.
- Включите пространство имен std в нашу программу, чтобы использовать его классы, не вызывая его.
- Создайте класс TestClass. { отмечает начало тела класса.
- Используйте модификатор доступа private, чтобы пометить переменные как частные, что означает, что доступ к ним возможен только из класса.
- Определите две целочисленные переменные, real и over.
- Используйте модификатор доступа public, чтобы пометить конструктор как общедоступный, что означает, что он будет доступен даже за пределами класса.
- Создание конструктора класса и инициализация переменных.
- Инициализируйте значение переменной real.
- Инициализируйте значение переменной.
- Конец тела конструктора.
- Переопределить значение оператора +.
- Создайте результат типа данных типа TestClass.
- Используйте оператор + с комплексными числами. Эта строка добавит действительную часть числа к действительной части другого числа.
- Используйте оператор + с комплексными числами. Эта строка добавит мнимую часть числа к мнимой части другого числа.
- При успешном выполнении программа вернет значение переменной result.
- Конец определения нового значения оператора +, то есть перегрузки.
- Вызовите метод print().
- Распечатайте новый комплексный номер после добавления в консоль.
- Конец тела функции print().
- Конец тела класса TestClass.
- Вызов функции main().
- Передача значений как реальных, так и сложных частей для добавления. Первая часть с1 будет добавлена к первой части с2, то есть 9+4. Вторая часть c1 будет добавлена ко второй части c, то есть 5+3.
- Выполнение операции с использованием перегруженного оператора + и сохранение результата в переменной c3.
- Вывод значения переменной c3 на консоль.
- Конец тела функции main().
Обзор:
- Вы можете указать более одного значения для оператора C++ в одной области.
- Это называется перегрузкой операторов.
- Перегрузка оператора обеспечивает особое значение оператора для пользовательского типа данных.
- Большинство операторов C++ можно переопределить с помощью перегрузки операторов.
- Не все операторы C++ можно перегружать.
- Для перегрузки оператора хотя бы один из операндов должен быть определяемым пользователем объектом.
- Перегружать можно только существующие операторы. Вы не можете перегружать новые операторы.
Язык C
- Передача массива в функцию в программировании на C++
- Перегрузка оператора Python
- Операторы в C++ с примером:что такое, типы и программы
- Цикл C++ do…while с примерами
- Указатели C++ с примерами
- Тип данных Char C++ с примерами
- Структура С++ с примером
- std::list в C++ с примером
- Функции C++ с примерами программ
- Лямбда-функции Python с ПРИМЕРАМИ