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