10 перегрузка
.pdf10–11
5.5.Перегрузка бинарных операторов
1)ПЕРЕГРУЗКА БИНАРНОГО ОПЕРАТОРА +
class coord {
int x, y; // координаты вектора
public:
coord(int i=0, int j=0)
{
x = i; y = j;
}
10–12
void getxy(int &i, int &j)
{
i = x; j = y;
}
coord operator+(coord ob); };
10–13
coord coord::operator+(coord ob)
{
coord t;
t.x = x + ob.x; t.y = y + ob.y; return t;
}
10–14
int main()
{
coord o1(10,10), o2(5,3), o3; int x, y;
// вызов ФО operator+()
o3 = o1 + o2;
// печать суммарного объекта
o3.getxy(x, y);
cout << ”(o1+o2) x = ” << x << ”, y = ” << y;
10–15
return 0;
}
(o1+o2) x = 15, y = 13
Сцепление вызовов ПО:
o1 + o2 + o3 + o4;
Допустима запись:
(o1 + o2).getxy(x, y);
10–16
2) ПЕРЕГРУЗКА БИНАРНЫХ ОПЕРАТОРОВ – И =
class coord { int x, y;
public:
... // см. предыдущий пример
coord operator-(coord ob); coord operator=(coord ob);
};
10–17
coord coord::operator-(coord ob)
{
coord t;
t.x = x - ob.x; t.y = y - ob.y; return t;
}
10–18
coord coord::operator=(coord ob)
{
x = ob.x; y = ob.y;
//возвращение объекта,
//которому присвоен объект
return *this;
}
10–19
int main()
{
coord o1(10,10), o2(5,3), o3; int x, y;
//вычитание объекта из объекта;
//вызов функции operator–()
o3 = o1 - o2;
// печать разностного объекта
o3.getxy(x, y);
10–20
cout << ”(o1–o2)x = ” << x
<<”, y = ” << y << endl;
//присваивание объекта объекту;
//вызов функции operator=()
o3 = o1;
// печать результирующего объекта
o3.getxy(x, y);
cout << ”(o3=o1) x = ” << x << ”, y = ” << y;
return 0;
}