Программа часто обрабатывает объекты, которые являются конкретными представителями абстрактных концепций. Такие концепции обычно включают набор операций представляющих основные операции над объектами кратким, удобным и стандартным способом. Однако из-за необходимости сохранения компактного представления языка только очень немного таких концепций могут поддерживаться языком программирования. Такую возможность обеспечивают классы. Классы задают представление непримитивных объектов вместе с набором операций которые можно выполнить над объектом. При этом для определения операций предлагается возможность применения более удобных и стандартных обозначений для обработки объектов класса, чем использование только функциональных обозначений.
class complex{
double re, im;
public:
complex(double r, double i){re=r; im=i;}
friend complex operatot +(complex, complex);
friend complex operatot *(complex, complex);
};
Приведенное объявление определит простую реализацию концепции комплексных чисел с плавающей точкой двойной точности, обрабатываемых посредством операций + и *. Смысл для операции + и * обеспечивается при помощи определения функций с именами operatot + и operatot* . Например пусть данные a и b имеют тип complex, тогда a+b обозначает по определению operatot +( a,b), теперь возможно дать интерпретацию комплексных выражений близкую к стандартной.
Пример:
Void f(){
complex a = complex(1, 3.1);
complex b = complex(1.2, 2);
complex c = b;
a=b+c; // a= operatot+(b,c)
b=b+c*a;//b= operatot+(b, operatot*(c,a))
c=a*b+ complex(1,2);
}
Имеют силу обычные правила приоритета, поэтому например второй оператор обозначает b+(c*a) а не (b+c)*a.
Перегрузка операций
24 Фев, 2009
