Для стандартных типов (int, float, double) в языке С определены стандартные операторы (+,-, *, и т.д.)
Язык С++ позволяет переопределить стандартные операторы для типов данных, созданных пользователем. Для примера рассмотрим класс
Complex, характеризующий комплексные числа (КЧ).
//orerload.h
#include<iostream.h>
class complex { //
private:
double re, im; //
public:
complex(double aRe= , double anIm=0)//
{ re=aRe; im=anIm;}
Complex operator+(const Complex c1);//
Complex operator-(const Complex c1);//
Complex operator-( );
Complex operator- - ( );
Complex operator + + ( );
Complex operator - - (int);
Complex operator(int);
int operator= = (const Complex &C1);
int operator!=(const Complex &C1);
friend istream operator>>(istream&,Complex&);
friend ostream operator<<(ostream,Complex);};
В закрытой части класса имеются поля: Re и Im, характеризующие Re и Im части КЧ. Для этого класса переопределены операторы сложения, вычитания, отрицания, префиксного инкремента, декремента, постфиксного инкремента, постфиксного декремента, операторы=,!=, операторы записи в поток и извлечения из потока.
Для примера рассмотрим оператор префиксного инкремента
Complex Complex:: operator++( ) //
{ re=re+1;return * tnis;}
Этот оператор увеличивает значение КЧ на 1. Оператор возвращает ссылку на измененное КЧ. Ключевое слово this - это указатель на самого себя. Постфиксный операторы возвращают неизмененное значение, поэтому при определении постфиксного инкремента мы создаем временное КЧ temp, а затем, изменив КЧ, возвращает temp т.е. старое значение КЧ.
Complex Complex:: operator ++(int) //
{ complex Temp(re,im)
re=re+1;
return Temp;
}
Аналогично реализованы операторы префиксного и постфиксного декремента (а++).
Рассмотрим оператор сравнения
int Complex:: operator==(const Complex&(1))
{
if(re==C1.re&&im==C1.im)
return1;
else
return 0;
}
Оператор возвращает 1, если числа равны, 0- если не равны.
Оператор вывода в поток
ostream&operator <<(ostream &os,Complex &a)
{ os<< «(«<<a.Re<<»,»<<a.im<<»)»<<end;
return os;}
Этот оператор переопределен как дружественная функция=> принимает 2 параметра. Он возвращает ссылку на поток вывода ostream. Рассмотрим его использование.
Complex C; (22)
оstream os; (23)
os.open(« « my.txt»); (24)
os<<c;//вывод в файл
cout<<c;//вывод на экран
В 22- создание объекта ( переменной с типа complex ).
В 23- создание объекта os для вывода в файл.
В 24- вызов метода open объекта os для записи в файл my.txt.
В следующей строке- запись КЧ в файл.
Для вывода на экран КЧ используется поток cout.
Для класса complex определили оператор <<( оператор записи в поток). Он может записывать КЧ в поток вывода, производной от ostream( например в поток cout), но это не обязательно должен быть поток cout. Так, в этой программе мы создали поток os- поток вывода в файл и записали туда КЧ. Аналогично перегружается оператор ввода из пот ока (25).