Объектно-ориентированный язык программирования С++ в примерах. Сивохин А.В. - 26 стр.

UptoLike

Составители: 

Для любой операции @ можно лишь задать новую семантику.Изме-
нить ее приоритет или арность,т.е.синтаксис выражений,невоз-
можно.Невозможно также задать различную семантику для префик-
сной и постфиксной форм записи операций ++ и --,т.е.не имеет
значения,как записывать ++x или x++,--x или x--.
Таким образом,при необходимости одна и та же операция @
помимо основной,предопределенной в языке семантики,может иметь
в программе или даже в иерархии составных типов несколько до-
полнительных семантик.Вывод требуемой семантики в каждой кон-
кретной точке программы осуществляется по типу используемых
операндов рассматриваемой операции,причем в ряде случаев могут
иметь место автоматические преобразования типов операндов.Та-
кое преобразование типов может иметь место,когда компилятор не
нашел операции с заданными типами операндов.Автоматически мо-
гут выполняться как стандартные преобразования типов,так и
преобразования типов,определяемые программистом,причем первым
отдается предпочтение - они выполняются в первую очередь,а для
вторых разрешен только один уровень.Разумеется,программист мо-
жет явно использовать любые стандартные и собственные преоб-
разования.
Для задания новой семантики операции @ программист должен
выполнить следующие действия:
1.Включить в соответствующий составной тип описание функ-
ции с именем operator@.
2.Включить в этот же тип описания функций для выполнения
необходимых преобразований типов.
3.Дать внешнее определение для функции operator@.
4.Дать внешние определения для всех функций преобразований
типов.
Если определения функций занимают мало места,то их можно
включать непосредственно в составной тип,замещая описания
этих функций.
Рассмотрим пример простой реализации понятия комплексного
числа,в котором число представляется парой чисел с плавающей
точкой двойной точности:
26
 Для любой операции @ можно лишь задать новую семантику.Изме-
нить ее приоритет или арность,т.е.синтаксис выражений,невоз-
можно.Невозможно также задать различную семантику для префик-
сной и постфиксной форм записи операций ++ и --,т.е.не имеет
значения,как записывать ++x или x++,--x или x--.
  Таким образом,при необходимости одна и та же операция @
помимо основной,предопределенной в языке семантики,может иметь
в программе или даже в иерархии составных типов несколько до-
полнительных семантик.Вывод требуемой семантики в каждой кон-
кретной точке программы осуществляется по типу используемых
операндов рассматриваемой операции,причем в ряде случаев могут
иметь место автоматические преобразования типов операндов.Та-
кое преобразование типов может иметь место,когда компилятор не
нашел операции с заданными типами операндов.Автоматически мо-
гут выполняться как стандартные преобразования типов,так и
преобразования типов,определяемые программистом,причем первым
отдается предпочтение - они выполняются в первую очередь,а для
вторых разрешен только один уровень.Разумеется,программист мо-
жет явно использовать любые стандартные и собственные преоб-
разования.
  Для задания новой семантики операции @ программист должен
выполнить следующие действия:
  1.Включить в соответствующий составной тип описание функ-
ции с именем operator@.
  2.Включить в этот же тип описания функций для выполнения
необходимых преобразований типов.
  3.Дать внешнее определение для функции operator@.
  4.Дать внешние определения для всех функций преобразований
типов.
  Если определения функций занимают мало места,то их можно
включать непосредственно в составной тип,замещая описания
этих функций.
  Рассмотрим пример простой реализации понятия комплексного
числа,в котором число представляется парой чисел с плавающей
точкой двойной точности:


                            26