Объектно-ориентированное программирование на языке С++. Ноткин А.М. - 46 стр.

UptoLike

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

47
Перегрузка унарных операций
Любая унарная операция может быть определена двумя спосо-
бами: либо как компонентная функция без параметров, либо как глобаль-
ная (возможно дружественная) функция с одним параметром. В первом
случае выражение Z означает вызов Z.operator (), во втором вызов
operator (Z).
Унарные операции, перегружаемые в рамках определенного клас-
са, могут перегружаться только через нестатическую компонентную функ-
цию без параметров. Вызываемый объект класса автоматически восприни-
мается как операнд.
Унарные операции,
перегружаемые вне области класса (как гло-
бальные функции), должны иметь один параметр типа класса. Передавае-
мый через этот параметр объект воспринимается как операнд.
Синтаксис:
а) в первом случае (описание в области класса):
тип_возвр_значения operator знак_операции
б) во втором случае (описание вне области класса):
тип_возвр_значения operator знак_операции(идентификатор
_типа)
Примеры.
1) class person 2) class person
{ int age; { int age;
... ...
public: public:
...
void operator++(){ ++age;} friend void operator++(person&);
}; };
void main() void person::operator++(person& ob)
{class person jon; {++ob.age;}
++jon;} void main()
{class person jon;
++jon;}
Перегрузка бинарных операций
Любая бинарная операция может быть определена двумя спо-
собами: либо как компонентная функция с одним параметром, либо как
глобальная (возможно дружественная) функция с двумя параметрами. В
первом случае xy означает вызов x.operator(y), во второмвызов
operator (x,y).
                                   47

     Перегрузка унарных операций
     • Любая унарная операция ⊕ может быть определена двумя спосо-
бами: либо как компонентная функция без параметров, либо как глобаль-

ная (возможно дружественная) функция с одним параметром. В первом
случае выражение ⊕ Z означает вызов Z.operator ⊕ (), во втором − вызов
operator ⊕(Z).
      • Унарные операции, перегружаемые в рамках определенного клас-
са, могут перегружаться только через нестатическую компонентную функ-
цию без параметров. Вызываемый объект класса автоматически восприни-
мается как операнд.
      • Унарные операции, перегружаемые вне области класса (как гло-
бальные функции), должны иметь один параметр типа класса. Передавае-
мый через этот параметр объект воспринимается как операнд.
      Синтаксис:
      а) в первом случае (описание в области класса):
      тип_возвр_значения operator знак_операции
      б) во втором случае (описание вне области класса):
      тип_возвр_значения operator знак_операции(идентификатор_типа)

     Примеры.
     1) class person                       2) class person
     { int age;                             { int age;
      ...                                    ...
     public:                                  public:
      …                                      ...
      void operator++(){ ++age;}           friend void operator++(person&);
      };                                     };
     void main()                        void person::operator++(person& ob)
     {class person jon;                    {++ob.age;}
      ++jon;}                               void main()
                                            {class person jon;
                                            ++jon;}

     Перегрузка бинарных операций
     • Любая бинарная операция ⊕ может быть определена двумя спо-
собами: либо как компонентная функция с одним параметром, либо как
глобальная (возможно дружественная) функция с двумя параметрами. В
первом случае x⊕y означает вызов x.operator⊕(y), во втором – вызов
operator ⊕(x,y).