В C ++ мы можем заставить операторы работать для пользовательских классов. Это означает, что C ++ имеет возможность придавать операторам особое значение для типа данных, эта возможность называется перегрузкой операторов.
Например, мы можем перегрузить оператор '+' в классе, подобном String, чтобы мы могли объединить две строки, просто используя +.
Другими примерами классов, где арифметические операторы могут быть перегружены, являются комплексное число, дробное число, большое целое число и т. Д.
Простой и полный пример
|
Выход:
12 + i9
В чем разница между операторскими функциями и нормальными функциями?
Операторские функции такие же, как обычные функции. Разница лишь в том, что именем операторной функции всегда является ключевое слово оператора, за которым следует символ оператора, а операторные функции вызываются при использовании соответствующего оператора.
Ниже приведен пример глобальной операторной функции.
|
Можем ли мы перегрузить всех операторов?
Почти все операторы могут быть перегружены, кроме немногих. Ниже приведен список операторов, которые не могут быть перегружены.
. (dot) :: ?: sizeof
Почему не могу (точка), ::,?: и sizeof быть перегруженным?
Смотрите это для ответов от самого Страуструпа.
Важные моменты о перегрузке оператора
1) Чтобы перегрузка оператора работала, хотя бы один из операндов должен быть объектом класса, определенного пользователем.
2) Оператор присваивания: компилятор автоматически создает оператор присваивания по умолчанию для каждого класса. Оператор присваивания по умолчанию назначает все элементы правой стороны левой стороне и прекрасно работает в большинстве случаев (это поведение аналогично конструктору копирования). Смотрите это для более подробной информации.
3) Оператор преобразования. Мы также можем написать операторы преобразования, которые можно использовать для преобразования одного типа в другой.
|
Выход:
0.4
Перегруженные операторы преобразования должны быть методом-членом. Другие операторы могут быть либо методом-членом, либо глобальным методом.
4) Любой конструктор, который можно вызвать с одним аргументом, работает как конструктор преобразования, это означает, что он также может использоваться для неявного преобразования в конструируемый класс.
|
Выход:
x = 20, y = 20 x = 30, y = 0
Скоро мы обсудим перегрузку некоторых важных операторов, таких как new, delete, запятая, вызов функции, стрелка и т. Д.
Ссылки:
http://en.wikipedia.org/wiki/Operator_overloading
Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.
Рекомендуемые посты:
- Типы перегрузки операторов в C ++
- C ++ | Перегрузка оператора | Вопрос 10
- Перегрузка операторов New и Delete в c ++
- Правила перегрузки операторов
- Перегрузка операторов инкремента (++) и декремента (-) в C ++
- Программа C ++ для сравнения двух строк с использованием перегрузки операторов
- Перегрузка Subscript или оператора индекса массива [] в C ++
- Программа на C ++ для объединения двух строк с использованием перегрузки операторов
- Перегрузка операторов в C ++ для печати содержимого вектора, карты, пары, ..
- Почему переопределение как глобального нового оператора, так и оператора, специфичного для класса, не является двусмысленным?
- Перегрузка в Java
- Перегрузка функций в C ++
- Перегрузка конструктора в C ++
- Работает ли перегрузка с наследованием?
- Перегрузка конструктора в Java
0.00 (0%) 0 votes