ВУЗ:
Составители:
Рубрика:
ром является неявный указатель 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
Страницы
- « первая
- ‹ предыдущая
- …
- 26
- 27
- 28
- 29
- 30
- …
- следующая ›
- последняя »