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

UptoLike

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

ром является неявный указатель this),или как функция-друг,по-
лучающая два параметра.Таким образом,для любой бинарной опе-
рации @ выражение aa@bb интерпретируется в первом случае как
aa.operator@(bb),а во втором случае как operator@(aa,bb).Ана-
логично префиксная или постфиксная унарная операция может быть
определена или как функция-член,не получающая явных парамет-
ров,или как функция-друг,получающая один параметр.Таким обра-
зом,для любой унарной операции @ aa@(или @aa) интерпретирует-
ся в первом случае как aa.operator@(),а во втором случае как
operator@(aa).При переопределении унарных операций префиксная
операция остается префиксной,а постфиксная операция - постфик-
сной.Заметим,что любой вариант задания новой семантики для би-
нарных и унарных операций не изменяет общепринятую форму за-
писи выражений.Это является достоинством выбранного в языке
С++ подхода по расширению его операционных возможностей.
Приведем несколько рекомендаций по выбору вида определяемой
функции:
1.Функция для операции,изменяющей состояние объекта(=,+=,++
и т.п.) должна быть функцией-членом,а не функцией-другом.
2.Если нужно иметь неявное преобразование для всех операндов
операции,то реализующая ее фукция должна быть другом,а не
членом.
3.Если никакие преобразования не определены, то реализующая
функция может быть как членом,так и другом.Однако и в этом
случае рекомендуется использовать функцию-член,так как в про-
тивном случае при включении функции для преобразования типов
может быть нарушена исходная семантика операции.Это включение
может иметь место при дальнейшей модификации программы поль-
зователем.
Заметим,что в языке С++ для составных типов (структура,объ-
единение и класс) имеется только четыре операции с предопре-
деленным смыслом:присваивание =,адрес объекта &, создание объ-
екта new и уничтожение объекта delete.Разумеется,что и этим
операциям программист может задать новую семантику.Особенно
часто такая необходимость возникает для операции присваива-
ния,поскольку выполняемая при этом побитовая копия объекта
того же типа может привести к непредсказуемым разрушениям в
28
ром является неявный указатель this),или как функция-друг,по-
лучающая два параметра.Таким образом,для любой бинарной опе-
рации @ выражение aa@bb интерпретируется в первом случае как
aa.operator@(bb),а во втором случае как operator@(aa,bb).Ана-
логично префиксная или постфиксная унарная операция может быть
определена или как функция-член,не получающая явных парамет-
ров,или как функция-друг,получающая один параметр.Таким обра-
зом,для любой унарной операции @ aa@(или @aa) интерпретирует-
ся в первом случае как aa.operator@(),а во втором случае как
operator@(aa).При переопределении унарных операций префиксная
операция остается префиксной,а постфиксная операция - постфик-
сной.Заметим,что любой вариант задания новой семантики для би-
нарных и унарных операций не изменяет общепринятую форму за-
писи выражений.Это является достоинством выбранного в языке
С++ подхода по расширению его операционных возможностей.
  Приведем несколько рекомендаций по выбору вида определяемой
функции:
  1.Функция для операции,изменяющей состояние объекта(=,+=,++
и т.п.) должна быть функцией-членом,а не функцией-другом.
  2.Если нужно иметь неявное преобразование для всех операндов
операции,то реализующая ее фукция должна быть другом,а не
членом.
  3.Если никакие преобразования не определены, то реализующая
функция может быть как членом,так и другом.Однако и в этом
случае рекомендуется использовать функцию-член,так как в про-
тивном случае при включении функции для преобразования типов
может быть нарушена исходная семантика операции.Это включение
может иметь место при дальнейшей модификации программы поль-
зователем.
  Заметим,что в языке С++ для составных типов (структура,объ-
единение и класс) имеется только четыре операции с предопре-
деленным смыслом:присваивание =,адрес объекта &, создание объ-
екта new и уничтожение объекта delete.Разумеется,что и этим
операциям программист может задать новую семантику.Особенно
часто такая необходимость возникает для операции присваива-
ния,поскольку выполняемая при этом побитовая копия объекта
того же типа может привести к непредсказуемым разрушениям в


                            28