Бьерн Страуструп - Язык программирования С++. Главы 5-8
Страница 53. Предопределенные свойства операций



7.2.2 Предопределенные свойства операций

 Используется только несколько предположений о свойствах пользовательских
 операций. В частности, operator=, operator[], operator() и
 operator-> должны быть нестатическими функциями-членами. Этим
 обеспечивается то, что первый операнд этих операций является адресом.
    Для некоторых встроенных операций их интерпретация определяется
 как комбинация других операций, выполняемых над теми же операндами.
 Так, если a типа int, то ++a означает a+=1, что в свою очередь
 означает a=a+1. Такие соотношения не сохраняются для пользовательских
 операций, если только пользователь специально не определил их с такой
 целью. Так, определение operator+=() для типа complex нельзя вывести
 из определений complex::operator+() и complex operator=().
    По исторической случайности оказалось, что операции = (присваивание),
 &(взятие адреса) и , (операция запятая) обладают предопределенными
 свойствами для объектов классов. Но можно закрыть от произвольного
 пользователя эти свойства, если описать эти операции как частные:

         class X {
            // ...
         private:
            void operator=(const X&);
            void operator&();
            void operator,(const X&);
            // ...
         };

         void f(X a, X b)
         {
            a= b;   // ошибка: операция = частная
            &a;     // ошибка: операция & частная
            a,b     // ошибка: операция , частная
         }

 С другой стороны, можно наоборот придать с помощью соответствующих
 определений этим операциям иное значение.

 
« Предыдущая статья   Следующая статья »