Перегрузка оператора C ++ с примерами

Содержание:

Anonim

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

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

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

В этом руководстве по C ++ вы узнаете:

  • Что такое перегрузка оператора?
  • Синтаксис
  • Различные подходы к перегрузке операторов в C ++
  • Можно ли перегружать все операторы C ++?
  • То, что нужно запомнить:
  • Правила перегрузки оператора:
  • Как перегрузить оператора:

Синтаксис

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

class class_name{… publicreturn_type operator symbol (argument(s)){… }… };

Вот объяснение синтаксиса выше:

  • Return_type - это тип возвращаемого значения для функции.
  • Затем вы упоминаете ключевое слово оператора.
  • Этот символ обозначает символ оператора, который необходимо перегрузить. Например, +, -, <, ++.
  • Аргумент (ы) может быть передан в операторную функцию так же, как и в функции.

Пример 1:

#include 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;}

Выход:

Вот скриншот кода:

Пояснение к коду:

  1. Включение файла заголовка iostream в наш код для использования его функций.
  2. Включите пространство имен std в нашу программу, чтобы использовать его классы, не вызывая его.
  3. Создайте класс с именем TestClass.
  4. Используйте модификатор частного доступа, который отмечает член класса как частный доступ.
  5. Создайте счетчик целочисленных переменных. Эта переменная будет доступна в частном порядке.
  6. Используйте модификатор публичного доступа, который помечает член класса как приватно доступный.
  7. Используйте конструктор класса, чтобы инициализировать счетчик переменных равным 5.
  8. Перегрузите смысл оператора -.
  9. Оператор уменьшит значение переменной x на 1.
  10. Конец раздела о перегрузке оператора. Оператору присвоено новое имя.
  11. Определение функции с именем Display ().
  12. Распечатайте значение счетчика переменных вместе с другим текстом на консоли при вызове функции Display (). } Отмечает конец тела функции Display ().
  13. Конец тела класса.
  14. Вызовите функцию main (). Программная логика должна быть добавлена ​​в эту функцию.
  15. Создайте экземпляр класса TestClass и дайте ему имя tc.
  16. Это вызовет функцию void operator - ().
  17. Используйте позицию класса TestClass для вызова функции Display ().
  18. Функция должна возвращать значение после успешного завершения.
  19. Конец тела функции main ().

Различные подходы к перегрузке операторов в C ++

Вы можете выполнить перегрузку оператора, реализовав любой из следующих типов функций:

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

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

Можно ли перегружать все операторы C ++?

Нет. Есть операторы C ++, которые нельзя перегружать.

Они включают:

  • :: -Оператор разрешения области видимости
  • ?: -тернарный оператор.
  • . -member селектор
  • Оператор sizeof
  • * -селектор указателя-члена

То, что нужно запомнить:

  1. С помощью перегрузки оператора вы можете переопределить способ работы оператора только для определенных пользователем типов (объектов, структур). Вы не можете использовать его для встроенных типов (float, char, int и т. Д.).
  2. Операторы = и & C ++ по умолчанию перегружены. Например, вы можете скопировать объекты одного и того же класса напрямую, используя оператор =.
  3. Приоритет операторов не меняет ассоциативно и приоритет операторов. Однако вы можете изменить порядок оценки, используя круглые скобки.
  4. Есть четыре оператора, которые нельзя перегрузить в C ++. Они включают в себя оператор разрешения области (: :), оператор выбора члена (.), Выбор члена с помощью указателя на оператор функции (. *) И тернарный оператор (? :).

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

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

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

Как перегрузить оператора:

Пример 1:

#include 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;}

Выход:

Вот скриншот кода:

Пояснение к коду:

  1. Включение файла заголовка iostream в наш код для использования его функций.
  2. Включите пространство имен std в нашу программу, чтобы использовать его классы, не вызывая его.
  3. Создайте класс с именем OperatorOverload.
  4. Используйте модификатор частного доступа, который отмечает член класса как частный доступ.
  5. Создайте целочисленную переменную x. Эта переменная будет доступна в частном порядке.
  6. Используйте модификатор публичного доступа, который помечает член класса как приватно доступный.
  7. Используйте конструктор класса для инициализации переменной x значением 10.
  8. Перегрузите смысл оператора ++.
  9. Оператор увеличит значение переменной x на 2.
  10. Конец раздела о перегрузке оператора. Оператору присвоено новое имя.
  11. Вызов функции Print ().
  12. Распечатайте значение переменной x вместе с другим текстом на консоли при вызове функции Print ().
  13. Конец тела функции Print ().
  14. Конец тела класса.
  15. Вызовите функцию main (). Программная логика должна быть добавлена ​​в эту функцию.
  16. Создайте экземпляр класса OperatorOverload с именем ov.
  17. Это вызовет функцию void operator ++ ().
  18. Используйте позицию класса OperatorOverload для вызова функции Print ().
  19. Функция должна возвращать значение после успешного завершения.
  20. Конец тела функции 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();}

Выход:

Вот скриншот кода:

Пояснение к коду:

  1. Включение файла заголовка iostream в нашу программу для использования его функций.
  2. Включите пространство имен std в нашу программу, чтобы использовать его классы, не вызывая его.
  3. Создайте класс с именем TestClass. {Отмечает начало тела класса.
  4. Используйте модификатор частного доступа, чтобы пометить переменные как частные, что означает, что к ним можно получить доступ только из класса.
  5. Определите две целочисленные переменные, вещественные и более.
  6. Используйте модификатор общего доступа, чтобы пометить конструктор как общедоступный, что означает, что он будет доступен даже за пределами класса.
  7. Создание конструктора класса и инициализация переменных.
  8. Инициализировать значение переменной real.
  9. Инициализируйте значение переменной заново.
  10. Конец тела конструктора.
  11. Отменить значение оператора +.
  12. Создайте результат типа данных типа TestClass.
  13. Используйте оператор + с комплексными числами. Эта строка добавит действительную часть числа к действительной части другого числа.
  14. Используйте оператор + с комплексными числами. Эта линия добавит мнимую часть числа к мнимой части другого числа.
  15. Программа вернет значение переменной result при успешном выполнении.
  16. Конец определения нового значения оператора +, то есть перегрузки.
  17. Вызовите метод print ().
  18. Выведите новое комплексное число после сложения на консоль.
  19. Конец тела функции print ().
  20. Конец тела класса TestClass.
  21. Вызов функции main ().
  22. Передача значений как реальных, так и сложных частей, которые нужно добавить. Первая часть c1 будет добавлена ​​к первой части c2, то есть 9 + 4. Вторая часть c1 будет добавлена ​​ко второй части c, то есть 5 + 3.
  23. Выполнение операции с использованием перегруженного оператора + и сохранение результата в переменной c3.
  24. Вывод значения переменной c3 на консоль.
  25. Конец тела функции main ().

Резюме:

  • Вы можете указать более одного значения для оператора C ++ в одной области.
  • Это называется перегрузкой оператора.
  • Перегрузка оператора обеспечивает особое значение оператора для определяемого пользователем типа данных.
  • Вы можете переопределить большинство операторов C ++ с помощью перегрузки операторов.
  • Не все операторы C ++ можно перегружать.
  • Чтобы оператор был перегружен, по крайней мере один из операндов должен быть определяемым пользователем объектом.
  • Только существующие операторы могут быть перегружены. Вы не можете перегружать новые операторы.