ВУЗ:
Составители:
Рубрика:
118
Для того, чтобы переопределить одну из стандартных операций
для работы с операндами абстрактных типов, программист должен на-
писать функцию с именем
operator ,
где – обозначение этой операции (например, + – | += и т.д.).
При этом в языке существует несколько ограничений:
нельзя создавать новые символы операций;
нельзя переопределять операции
:: * (– разыменование, не бинарное умножение) ?:
sizeof . .* # ##
символ унарной операции не может использоваться для переоп-
ределения бинарной операции и наоборот. Например, символ << мож-
но использовать только для бинарной операции, ! – только для унарной,
а & – и для унарной, и для бинарной;
переопределение операций не меняет ни их приоритетов, ни по-
рядка их выполнения (слева направо или справа налево);
при перегрузке операции компьютер не делает никаких предпо-
ложений о ее свойствах. Это означает, что если стандартная операция
+= может быть выражена через операции + и =, т.е. а + = b эквива-
лентно а = а + b, то для переопределения операций в общем случае та-
ких соотношений не существует, хотя, конечно, программист может их
обеспечить. Кроме того, не делается предположений, например, о ком-
мутативности операции +: компилятор не имеет оснований считать,
что а + b, где а и b – абстрактных типов – это то же самое, что и b + a;
никакая операция не может быть переопределена для операндов
стандартных типов.
Функция operator () является обычной функцией, которая может
содержать от 0 до 2 явных аргументов. Она может быть, а может и не
быть функцией-членом класса.
class cl { int i;
public:
int get () {return i;}
int operator + (int ); // Бинарный плюс.
};
int operator + (cl&, float); // Бинарный плюс.
В первой форме бинарного плюса не один, а два аргумента. Пер-
вый – неявный. Его имеет любая нестатическая функция-член класса;
Страницы
- « первая
- ‹ предыдущая
- …
- 114
- 115
- 116
- 117
- 118
- …
- следующая ›
- последняя »
