Что такое перегрузка оператора?
Используя перегрузку операторов в C ++, вы можете указать более одного значения для оператора в одной области. Цель перегрузки оператора - предоставить особое значение оператора для определяемого пользователем типа данных.
С помощью перегрузки операторов вы можете переопределить большинство операторов C ++. Вы также можете использовать перегрузку операторов для выполнения различных операций с помощью одного оператора.
В этом руководстве по C ++ вы узнаете:
- Что такое перегрузка оператора?
- Синтаксис
- Различные подходы к перегрузке операторов в C ++
- Можно ли перегружать все операторы C ++?
- То, что нужно запомнить:
- Правила перегрузки оператора:
- Как перегрузить оператора:
Синтаксис
Чтобы перегрузить оператор C ++, вы должны определить специальную функцию внутри класса следующим образом:
class class_name{… publicreturn_type operator symbol (argument(s)){… }… };
Вот объяснение синтаксиса выше:
- Return_type - это тип возвращаемого значения для функции.
- Затем вы упоминаете ключевое слово оператора.
- Этот символ обозначает символ оператора, который необходимо перегрузить. Например, +, -, <, ++.
- Аргумент (ы) может быть передан в операторную функцию так же, как и в функции.
Пример 1:
#includeusing 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 ().
- Распечатайте значение счетчика переменных вместе с другим текстом на консоли при вызове функции Display (). } Отмечает конец тела функции Display ().
- Конец тела класса.
- Вызовите функцию main (). Программная логика должна быть добавлена в эту функцию.
- Создайте экземпляр класса TestClass и дайте ему имя tc.
- Это вызовет функцию void operator - ().
- Используйте позицию класса TestClass для вызова функции Display ().
- Функция должна возвращать значение после успешного завершения.
- Конец тела функции main ().
Различные подходы к перегрузке операторов в C ++
Вы можете выполнить перегрузку оператора, реализовав любой из следующих типов функций:
- Функция члена
- Функция, не являющаяся членом
- Функция друга
- Функция перегрузки оператора может быть функцией-членом, если левый операнд является объектом класса.
- Если левый операнд отличается, функция перегрузки оператора должна быть функцией, не являющейся членом.
Вы можете сделать функцию перегрузки оператора дружественной функцией, если ей нужен доступ к закрытым и защищенным членам класса.
Можно ли перегружать все операторы C ++?
Нет. Есть операторы C ++, которые нельзя перегружать.
Они включают:
- :: -Оператор разрешения области видимости
- ?: -тернарный оператор.
- . -member селектор
- Оператор sizeof
- * -селектор указателя-члена
То, что нужно запомнить:
- С помощью перегрузки оператора вы можете переопределить способ работы оператора только для определенных пользователем типов (объектов, структур). Вы не можете использовать его для встроенных типов (float, char, int и т. Д.).
- Операторы = и & C ++ по умолчанию перегружены. Например, вы можете скопировать объекты одного и того же класса напрямую, используя оператор =.
- Приоритет операторов не меняет ассоциативно и приоритет операторов. Однако вы можете изменить порядок оценки, используя круглые скобки.
- Есть четыре оператора, которые нельзя перегрузить в C ++. Они включают в себя оператор разрешения области (: :), оператор выбора члена (.), Выбор члена с помощью указателя на оператор функции (. *) И тернарный оператор (? :).
Правила перегрузки оператора:
Вот правила перегрузки оператора:
- Чтобы он работал, по крайней мере один операнд должен быть объектом класса, определяемым пользователем.
- Вы можете только перегрузить существующие операторы. Вы не можете перегружать новые операторы.
- Некоторые операторы нельзя перегрузить с помощью дружественной функции. Однако такие операторы могут быть перегружены с помощью функции-члена.
Как перегрузить оператора:
Пример 1:
#includeusing 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:
#includeusing 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. {Отмечает начало тела класса.
- Используйте модификатор частного доступа, чтобы пометить переменные как частные, что означает, что к ним можно получить доступ только из класса.
- Определите две целочисленные переменные, вещественные и более.
- Используйте модификатор общего доступа, чтобы пометить конструктор как общедоступный, что означает, что он будет доступен даже за пределами класса.
- Создание конструктора класса и инициализация переменных.
- Инициализировать значение переменной real.
- Инициализируйте значение переменной заново.
- Конец тела конструктора.
- Отменить значение оператора +.
- Создайте результат типа данных типа TestClass.
- Используйте оператор + с комплексными числами. Эта строка добавит действительную часть числа к действительной части другого числа.
- Используйте оператор + с комплексными числами. Эта линия добавит мнимую часть числа к мнимой части другого числа.
- Программа вернет значение переменной result при успешном выполнении.
- Конец определения нового значения оператора +, то есть перегрузки.
- Вызовите метод print ().
- Выведите новое комплексное число после сложения на консоль.
- Конец тела функции print ().
- Конец тела класса TestClass.
- Вызов функции main ().
- Передача значений как реальных, так и сложных частей, которые нужно добавить. Первая часть c1 будет добавлена к первой части c2, то есть 9 + 4. Вторая часть c1 будет добавлена ко второй части c, то есть 5 + 3.
- Выполнение операции с использованием перегруженного оператора + и сохранение результата в переменной c3.
- Вывод значения переменной c3 на консоль.
- Конец тела функции main ().
Резюме:
- Вы можете указать более одного значения для оператора C ++ в одной области.
- Это называется перегрузкой оператора.
- Перегрузка оператора обеспечивает особое значение оператора для определяемого пользователем типа данных.
- Вы можете переопределить большинство операторов C ++ с помощью перегрузки операторов.
- Не все операторы C ++ можно перегружать.
- Чтобы оператор был перегружен, по крайней мере один из операндов должен быть определяемым пользователем объектом.
- Только существующие операторы могут быть перегружены. Вы не можете перегружать новые операторы.