Бьерн Страуструп. Язык программирования С++ Второе дополненное издание



Pdf көрінісі
бет136/256
Дата11.07.2022
өлшемі2,87 Mb.
#37591
1   ...   132   133   134   135   136   137   138   139   ...   256
7.2.1 Бинарные и унарные операции 
Бинарную операцию можно определить как функцию-член с одним параметром, или как глобальную 
функцию с двумя параметрами. Значит, для любой бинарной операции @ выражение aa @ bb 
интерпретируется либо как aa.operator(bb), либо как operator@(aa,bb). Если определены обе функции, 
то выбор интерпретации происходит по правилам сопоставления параметров ($$R.13.2). Префиксная 
или постфиксная унарная операция может определяться как функция-член без параметров, или как 
глобальная функция с одними параметром. Для любой префиксной унарной операции @ выражение 
@aa интерпретируется либо как aa.operator@(), либо как operator@(aa). Если определены обе функции, 
то выбор интерпретации происходит по правилам сопоставления параметров ($$R.13.2). Для любой 
постфиксной унарной операции @ выражение @aa интерпретируется либо как aa.operator@(int), либо 
как operator@(aa,int). Подробно это объясняется в $$7.10. Если определены обе функции, то выбор 
интерпретации происходит по правилам сопоставления параметров ($$13.2). Операцию можно 
определить только в соответствии с синтаксическими правилами, имеющимися для нее в грамматике 
С++. В частности, нельзя определить % как унарную операцию, а + как тернарную. Проиллюстрируем 
сказанное примерами: 
class X { 
// члены (неявно используется указатель `this'): 
X* 
operator&(); 
// префиксная унарная операция & 
// (взятие адреса) 

operator&(X); 
// бинарная операция & (И поразрядное) 

operator++(int); 
// постфиксный инкремент 

operator&(X,X); 
// ошибка: & не может быть тернарной 

operator/(); 
// ошибка: / не может быть унарной 
}; 
// глобальные функции (обычно друзья) 
X operator-
(X); // префиксный унарный минус 


Бьерн Страуструп.
Язык программирования С++ 
 
183 
X operator-
(X,X); // бинарный минус 
X operator--
(X&,int); // постфиксный инкремент 
X operator-
(); // ошибка: нет операнда 
X operator-
(X,X,X); // ошибка: тернарная операция 
X operator%(X); // ошибка: унарная операция % 
Операция [] описывается в $$7.7, операция () в $$7.8, операция -> в $$7.9, а операции ++ и -- в $$7.10. 


Достарыңызбен бөлісу:
1   ...   132   133   134   135   136   137   138   139   ...   256




©emirsaba.org 2024
әкімшілігінің қараңыз

    Басты бет