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



Pdf көрінісі
бет135/256
Дата11.07.2022
өлшемі2,87 Mb.
#37591
1   ...   131   132   133   134   135   136   137   138   ...   256
Байланысты:
Бьерн Страуструп. Язык программирования С . М Бином, 2011

7.2 Операторные функции 
Можно описать функции, определяющие интерпретацию следующих операций: 


Бьерн Страуструп.
Язык программирования С++ 
 
182 
+ - * / % ^ & | ~ ! 
= < > += -= *= /= %= ^= &= 
|= << >> >>= <<= == != <= >= && 
|| ++ -- ->* , -> [] () new delete 
Последние пять операций означают: косвенное обращение ($$7.9), индексацию ($$7.7), вызов функции 
($$7.8), размещение в свободной памяти и освобождение ($$3.2.6). Нельзя изменить приоритеты этих 
операций, равно как и синтаксические правила для выражений. Так, нельзя определить унарную 
операцию % , также как и бинарную операцию !. Нельзя ввести новые лексемы для обозначения 
операций, но если набор операций вас не устраивает, можно воспользоваться привычным 
обозначением вызова функции. Поэтому используйте pow(), а не ** . Эти ограничения можно счесть 
драконовскими, но более свободные правила легко приводят к неоднозначности. Допустим, мы 
определим операцию ** как возведение в степень, что на первый взгляд кажется очевидной и простой 
задачей. Но если как следует подумать, то возникают вопросы: должны ли операции ** выполняться 
слева направо (как в Фортране) или справа налево (как в Алголе)? Как интерпретировать выражение 
a**p как a*(*p) или как (a)**(p)? 
Именем операторной функции является служебное слово operator, за которым идет сама операция
например, operator<<. Операторная функция описывается и вызывается как обычная функция. 
Использование символа операции является просто краткой формой записи вызова операторной 
функции: 
void f(complex a, complex b) 

complex c = a + b; 
// 
краткая форма 
complex d = operator+(a,b); 
// 
явный вызов 

С учетом приведенного описания типа complex инициализаторы в этом примере являются 
эквивалентными. 


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




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

    Басты бет