10 перегрузка
.pdf10–41
// ПО для операции ob + int
coord operator+(coord ob, int i)
{
coord t;
t.x = ob.x + i; t.y = ob.y + i; return t;
}
10–42
// ПО для операции int + ob
coord operator+(int i, coord ob)
{
coord t;
t.x = i + ob.x; t.y = i + ob.y; return t;
}
10–43
int main()
{
coord o1(10,10), o2(10,10); int x, y;
o1 = o1 + 10; // объект + ЦЧ
o1.getxy(x, y);
cout << ”(o1+10) ” << ”x = ” << x
<< |
”, y = ” << y << endl; |
|
o2 = 10 |
+ o2; |
// ЦЧ + объект |
10–44
o2.getxy(x, y);
cout << ”(10+o2) ” << ”x = ” << x << ”, y = ” << y;
return 0;
}
(o1+10) x = 20, y = 20
(10+o2) x = 20, y = 20
10–45
2) ПЕРЕГРУЗКА УНАРНЫХ ОПЕРАТОРОВ
Пример:
class coord { int x, y;
public:
... // см. предыдущий пример
friend coord operator++(coord &ob); };
10–46
coord operator++(coord &ob)
{
ob.x++;
ob.y++;
//возвращение объекта, являющегося
//источником вызова
return ob;
}
10–47
int main()
{
coord o1(10,10); int x, y;
++o1; // объект o1 передается по ссылке
o1.getxy(x, y);
cout << ”(++o1) ” << ”x = ” << x << ”, y = ” << y;
return 0;
}
10–48
(++o1) x = 11, y = 11
10–49
5.9. Перегрузка оператора индекса массива
Оператор [](индекс массива) можно перегружать только в виде ФЭ класса:
тип имя_класса::operator[](int индекс)
{
// тело ф-ции
}
10–50
Пусть объект ob индексируется как ob[9].
Тогда выполняется вызов ФО:
ob.operator[](9);
ФО с именем operator[] получает выражение, заданное в [], как параметр.
Внутри ФО указатель this ссылается на
объект ob, являющийся источником вызова.