ВУЗ:
Составители:
Рубрика:
119
этот аргумент является указателем на объект, для которого она вызвана.
Реализация обеих функций может выглядеть так:
int cl::operator + (int op2){
return i + op2;}
int operator + (cl &op, float op2){
return op.get() + op2;}
Что будет, если в глобальной функции ::operator+() второй аргу-
мент будет иметь тип не float, а int? В этом случае компилятор выдаст
сообщение об ошибке, так как он не сможет сделать выбор между
функциями cl::operator + () и ::operator +() – обе подходят в равной сте-
пени.
Для выполнения переопределенной унарной операции х (или
х), где х – объект некоторого абстрактного типа Class, компилятор
пробует найти либо функцию Class::operator (void), либо ::operator
(Class). Если найдены одновременно оба варианта, то фиксируется
ошибка.
Интерпретация выражения осуществляется либо как
x.operator (void), либо как operator (x).
Для выполнения переопределенной бинарной операции x y, где
х обязательно является объектом абстрактного типа Class, компиля-
тор ищет либо функцию Class::operator (type y), либо функцию
::operatr (Class, type y), причем type может быть как стандартным, так и
абстрактным типом.
Интерпретируется выражение x y либо как
x.operator (y), либо как operator (x, y).
Как для унарной, так и для бинарной операции число аргументов
функции operator () должно точно соответствовать числу операндов
этой операци. Заметим, что часто удобно передавать значения парамет-
ров в функцию operator () не по значению, а по ссылке.
Рассмотрим для примера операцию сложения, определенную над
классом “комплектное число“:
class complex {
double re, im;
public:
double & real () { return re; }
double & imag () { return im; }
//. . .
};
Страницы
- « первая
- ‹ предыдущая
- …
- 115
- 116
- 117
- 118
- 119
- …
- следующая ›
- последняя »
