C++ OperaПерегрузка tor примерами
Что такое Operator Перегрузка?
. перегрузка оператора in 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.
- Используйте модификатор частного доступа, который помечает член класса как доступный частным образом.
- Создайте целочисленную переменную count. Эта переменная будет доступна в частном порядке.
- Используйте модификатор общего доступа, который помечает член класса как доступный частным образом.
- Используйте конструктор класса, чтобы инициализировать счетчик переменной значением 5.
- Перегрузите значение оператора —.
- Оператор уменьшит значение переменной x на 1.
- Конец раздела перегрузки операторов. Оператору присвоено новое имя.
- Определение функции с именем Display().
- Выведите значение счетчика переменных вместе с другим текстом на консоли при вызове функции Display(). } отмечает конец тела функции Display().
- Конец тела класса.
- Вызовите функцию main(). Логика программы должна быть добавлена в эту функцию.
- Создайте экземпляр класса TestClass и присвойте ему имя tc.
- Это вызовет функцию оператора void –().
- Используйте позицию класса TestClass для вызова функции Display().
- Функция должна возвращать значение после успешного завершения.
- Конец тела функции main().
Различные подходы к Operator Перегрузка в C++
Вы можете выполнить перегрузку операторов, реализовав любой из следующих типов функций:
- Функция члена
- Функция, не являющаяся членом
- Функция друга
- Функция перегрузки оператора может быть функцией-членом, если левый операнд является объектом класса.
- Когда левый операнд отличается, OperaФункция перегрузки tor не должна быть функцией-членом.
Вы можете сделать функцию перегрузки оператора дружественной функцией, если ей необходим доступ к закрытым и защищенным членам класса.
Могут ли все C++ OperaТоры будут перегружены?
Нет. Есть C++ операторы, которые нельзя перегружать.
Они включают в себя:
- :: -Оператор разрешения области видимости
- ?: -тернарный оператор.
- . - выбор участников
- Оператор размера
- * -селектор указателя члена
То, что нужно запомнить
- С помощью перегрузки операторов вы можете переопределить способ работы операторов только для определяемых пользователем типов (объектов, структур). Вы не можете использовать его для встроенных типов (float, char, int и т. д.).
- = и & C++ Операторы перегружены по умолчанию. Например, вы можете копировать объекты одного и того же класса напрямую, используя оператор =.
- OperaПриоритет tor не меняет ассоциативность и приоритет операторов. Однако вы можете изменить порядок оценки с помощью скобок.
- Есть четыре оператора, которые нельзя перегружать. C++. Они включают в себя оператор разрешения области действия (::), оператор выбора члена (.), оператор выбора члена через указатель на функцию (.*) и тернарный оператор (?:).
Правила Operaперегрузка tor
Вот правила для OperaПерегрузка Тора:
- Чтобы это работало, по крайней мере один операнд должен быть объектом пользовательского класса.
- Вы можете перегружать только существующие операторы. Вы не можете перегружать новые операторы.
- Некоторые операторы невозможно перегрузить с помощью дружественной функции. Однако такие операторы можно перегрузить с помощью функции-члена.
Как перегрузить Operaтор
Пример 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 ++().
- Используйте позицию 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, чтобы пометить переменные как частные, то есть доступ к ним возможен только внутри класса.
- Определите две целочисленные переменные: вещественную и более.
- Используйте модификатор доступа public, чтобы пометить конструктор как общедоступный, то есть он будет доступен даже за пределами класса.
- Создание конструктора класса и инициализация переменные.
- Инициализируйте значение переменной real.
- Инициализируйте значение переменной заново.
- Конец тела конструктора.
- Переопределить значение оператора +.
- Создайте результат типа данных типа TestClass.
- Используйте оператор + с комплексными числами. Эта строка добавит действительную часть числа к действительной части другого числа.
- Используйте оператор + с комплексными числами. Эта строка добавит мнимую часть числа к мнимой части другого числа.
- Программа вернет значение переменной result при успешном выполнении.
- Конец определения нового значения оператора +, то есть перегрузки.
- Вызовите метод print().
- Выведите новое комплексное число после сложения на консоли.
- Конец тела функции print().
- Конец тела класса TestClass.
- Вызов функции main().
- Передача значений как реальных, так и сложных частей, которые нужно добавить. Первая часть с1 будет добавлена к первой части с2, то есть 9+4. Вторая часть c1 будет добавлена ко второй части c, то есть 5+3.
- Выполнение операции с использованием перегруженного оператора + и сохранение результата в переменной c3.
- Вывод значения переменной c3 на консоль.
- Конец тела функции main().
Резюме
- Вы можете указать более одного значения для C++ оператор в одном объеме.
- Это называется перегрузкой операторов.
- OperaПерегрузка tor обеспечивает особое значение оператора для определяемого пользователем типа данных.
- Вы можете переопределить большинство C++ операторов посредством перегрузки операторов.
- Не все C++ операторы могут быть перегружены.
- Чтобы оператор был перегружен, хотя бы один из операндов должен быть определяемым пользователем объектом.
- Перегружаться могут только существующие операторы. Вы не можете перегружать новые операторы.