Переопределение оператора методом класса
Операторная функция, с помощью которой перегружается оператор, может быть внутренней, то есть являться методом класса. Принципиально ситуация мало отличается от рассмотренных ранее, однако есть ряд особенностей, главная из которых связана со способом передачи аргументов такой функции. Строго говоря, драматические изменения происходят только с количеством аргументов в операторных функциях - при перегрузке бинарных операторов функции передается один аргумент, а при перегрузке унарных операторов функции аргументы не передаются (за исключением, пожалуй, перерузки префиксной формы операторов инкремента и декремента). Причина связана с тем, что один аргумент внутренней операторной функции - объект, из которого вызывается эта функция Доступ к этому объекту, в случае необходимости, можно получить через указатель В качестве иллюстрации рассмотрим, как будет выглядеть процедура перегрузки оператора сложения, если перегрузка осуществляется методом класса. Программный код приведен ниже.
#includeusing namespace std; //Класс для реализации комплексных чисел: class MComp{ public: double Re; double Im; //Переопределение оператора сложения методом класса: MComp operator+(MComp y){ MComp z; z.Re=Re+y.Re; z.Im=Im+y.Im; return z;} }; int main(){ MComp a,b,c; a.Re=1; a.Im=2; b.Re=2; b.Im=3; //Сложение объектов: c=a+b; cout << "c.Re = " << c.Re << "\n"; cout << "c.Im = " << c.Im << "\n"; return 0; }