Перегрузка операций
Часто, для удобства, бывает полезно переопределить некоторый оператор для класса (например, + для векторов). Тогда запись программы становится более компактной и понятной. Общая форма определения оператора выглядит следующим образом:
<return_type> operator <operator_sign> (<operator_parametres>);
Операторы бывают унарные (работающие с одним объектом) и бинарные (работающие с двумя объектами). Примеры унарных операторов: ++, --, * (оператор разыменования). Примеры бинарных операторов: +, +=, * (умножение), ==.
Операторы являются теми же функциями, только со специальными именами. Они могут быть объявлены как вне класса, так и как член класса. Пример перегрузки операторов:
Обычно унарные операторы объявляются как часть класса. Бинарные операторы могут быть объявлены как внутри класса, так и вне класса. Бинарный оператор, объявленный внутри класса, имеет только один входной параметр (вторым параметром оператора будет объект, оператор которого вызывается). Бинарные операторы, объявленные вне класса, имеют два параметра.
Рекомендация: для определения, где лучше всего описывать оператор - внутри класса или вне его, - спросите себя, изменяет ли этот оператор свои входные параметры. Если изменяет - то этот оператор - часть класса. Если не изменяет, то оператор лучше всего определить вне класса.
В следующем примере показаны способы перегрузки операторов для двумерного вектора:
Обычно бинарные операторы, определенные в классе, объявляют возвращающими значение. С моей точки зрения эта практика неудобна, потому что код, написанный с использованием данных операторов трудночитаем. Например, попробуйте оценить результат выполнения кода:
Last updated