Class dek_koord. { int x,y; // декартовы координаты точки

{ int x,y; // декартовы координаты точки

public:

. . .

int read_x(); // возвращает компоненту x

int read_y(); // возвращает компоненту y

void write_x(int); // модифицирует компоненту x

void write_y(int); // модифицирует компоненту y

. . .

};

int dek_koord::read_x(){return x;}

int dek_koord::read_y(){return y;}

void dek_koord::write_x(int a){x=a;}

void dek_koord::write_y(int a){y=a;}

dek_koord operator*(dek_koord a,dek_koord b) // перегрузка операции *

{ dek_koord tmp; // функция operator − глобальная

tmp.write_x(a.read_x()*b.read_x());

tmp.write_y(a.read_y()*b.read_y());

return tmp;

}

В глобальной функции operator* доступ к private данным локального объекта tmp возможен через public-функции этого объекта, либо данные класса должны иметь атрибут public, что не отвечает принципу инкапсуляции. Кроме того, если функция operator является friend-функцией некоторого класса, то она имеет доступ к private-компонентам этого класса. Это будет рассмотрено несколько ниже.

Далее приведен пример еще одной программы перегрузки оператора «- » для использования его при вычитании из одной строки другой.

#include <iostream>

using namespace std;

#include <string.h>

Class String

{ char str[80]; // локальная компонента

public: // глобальные компоненты

void init (char *s); // функция инициализации

int operator - (String s_new); // прототип функции operator

} my_string1, my_string2; // описание двух объектов класса String

void String::init (char *s) // функция обеспечивает копирование

// строки аргумента(s) в строку-компоненту

{ strcpy(str,s);} // (str) класса String

int String::operator - (String s_new) // перегрузка оператора – (вычитания

// строк)

{ for (int i=0; str[i]==s_new.str[i]; i++)

if (!str[i]) return 0;

return str[i] - s_new.str[i];

}

int main()

{ char s1[51], s2[51];

cout <<"Введите первую строку (не более 80 символов) :" <<endl;

cin >>s1;

cout<<" Введите вторую строку (не более 80 символов) : "<<endl;

cin>>s2;

my_string1.init(s1); //инициализация объекта my_string1

my_string2.init(s2); //инициализация объекта my_string2

cout <<"\nString1 - String2 = "; // вывод на экран разности двух строк

cout << my_string1 - my_string2 << endl;

return 0;

}

Результат работы программы:

Введите первую строку (не более 80 символов) :

overload

Введите вторую строку (не более 80 символов) :

function

String1 – String2 = 9

При перегрузке бинарного оператора с использованием компоненты-функции ей передается в качестве параметра только один аргумент. Второй аргумент получается посредством использования неявного указателя this на объект, компоненты которого модифицируются.