Объектно-ориентированное программирование. Сивохин А.В - 41 стр.

UptoLike

41
Для определения операции используется вводимая пользователем функция с
ключевым словом operator, за которым следует символ операции. Далее будут
приведены общие правила переопределения операций.
1. За исключением операций new и delete, операции должны быть
нестатическими функциями-элементами класса или иметь минимум один аргумент
типа класса. Функции-операции =, () ,[], -> должны быть нестатическими
элементами класса.
2. В ранних версиях языка Си++ постфиксные и префиксные версии операторов
++ и -- не различались при перегрузке. В соответствии со стандартом языка Си++
AT&T 2.1, функция operator@() рассматривается как префиксная форма оператора,
тогда как функция operator@(int) соответствует постфиксной форме, параметр
функции является фиктивным.
3. Операция, которая переопределяется, должна существовать в
языке. Нельзя,
например, определить оператор #.
4. Нельзя переопределять следующие операции: ., :: , ?:.
5. Приоритет операций при переопределении сохраняется.
6. При переопределении любой унарной операции @ выражение @x или x@
интерпретируется как x.operator@() или как operator@(x).
Для любой бинарной операции @ выражение x@y интерпретируется как
x.operator@(y) или как operator@(x,y).
7. Операции new и delete
могут быть переопределены. Операция new должна
возвращать результат типа void * и иметь первый аргумент типа size_t. Операция
delete должна возвращать результат типа void и иметь первый аргумент типа void *,
второй аргумент может быть типа size_t. Операции new и delete всегда являются
статическими элементами класса, даже при отсутствии в их описании ключевого
слова static.
Пример класса
В предлагаемом примере использованы возможности языка Си++,
рассмотренные выше.
Пример:
// Заголовочный файл textpoint.h, описание класса
#ifndef _TEXTPOINT_H_
#define _TEXTPOINT_H_
class TextPoint
{ private:
int color; //Цвет символа
int x,y; //Положение символа на экране
int visible; //Видим ли символ?
                                                                              41
     Для определения операции используется вводимая пользователем функция с
ключевым словом operator, за которым следует символ операции. Далее будут
приведены общие правила переопределения операций.
     1. За исключением операций new и delete, операции должны быть
нестатическими функциями-элементами класса или иметь минимум один аргумент
типа класса. Функции-операции =, () ,[], -> должны быть нестатическими
элементами класса.
     2. В ранних версиях языка Си++ постфиксные и префиксные версии операторов
++ и -- не различались при перегрузке. В соответствии со стандартом языка Си++
AT&T 2.1, функция operator@() рассматривается как префиксная форма оператора,
тогда как функция operator@(int) соответствует постфиксной форме, параметр
функции является фиктивным.
     3. Операция, которая переопределяется, должна существовать в языке. Нельзя,
например, определить оператор #.
     4. Нельзя переопределять следующие операции: ., :: , ?:.
     5. Приоритет операций при переопределении сохраняется.
     6. При переопределении любой унарной операции @ выражение @x или x@
интерпретируется как x.operator@() или как operator@(x).
     Для любой бинарной операции @ выражение x@y интерпретируется как
x.operator@(y) или как operator@(x,y).
     7. Операции new и delete могут быть переопределены. Операция new должна
возвращать результат типа void * и иметь первый аргумент типа size_t. Операция
delete должна возвращать результат типа void и иметь первый аргумент типа void *,
второй аргумент может быть типа size_t. Операции new и delete всегда являются
статическими элементами класса, даже при отсутствии в их описании ключевого
слова static.

                                Пример класса
     В предлагаемом примере использованы возможности              языка   Си++,
рассмотренные выше.
     Пример:
  // Заголовочный файл textpoint.h, описание класса
  #ifndef _TEXTPOINT_H_
  #define _TEXTPOINT_H_
  class TextPoint
  { private:
    int color; //Цвет символа
    int x,y;    //Положение символа на экране
    int visible; //Видим ли символ?