C++   ::   Хилл Мюррей

Страница: 199 из 357

Иногда определение того, как действуют операции на объекты классов, позволяет программисту обеспчить более общепринятую и удобную запись для манипуляции обектами классов, чем та, которуюможно достичь используя лишь основную функциональную запись. Например:

class complex (* double re, im; public: complex(double r, double i) (* re=r; im=i; *) friend complex operator+(complex, complex); friend complex operator*(complex, complex); *);

определяет простую реализацию понятия комплексного чила, в которой число представляется парой чисел с плавающей точкой двойной точности, работа с которыми осуществляется посредством операций + и * (и только). Программист задает смысл операций + и * с помощью определения функций с именами operator+ и operator*. Если, например, даны b и c типа complex, то b+c означает (по определению) operator+(b,c). Тперь есть возможность приблизить общепринятую интерпретацию комплексных выражений. Например:

void f() (* complex a = complex(1, 3.1); complex b = complex(1.2, 2); complex c = b;

a = b+c; b = b+c*a; c = a*b+complex(1,2); *)

Выполняются обычные правила приоритетов, поэтому второй оператор означает b=b+(c*a), а не b=(b+c)*a.



6.2 Функции Операции

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

+ – * / % ^ amp; ! ~ ! = « » += -= *= /= %= ^= amp;= != «„ “» »»= «„= == != «= “= amp; amp; !! ++ – [] () new delete

Последние четыре – это индексирование (#6.7), вызов функции (#6.8), выделение свободной памяти и освобождение свободной памяти (#3.2.6). Изменить приоритеты перечисленных операций невозможно, как невозможно изменить и синтаксис вражений. Нельзя, например, определить унарную операцию % или бинарную !.

|< Пред. 197 198 199 200 201 След. >|

Java книги

Контакты: [email protected]