Пространства имён
Варианты
Действия

Перегрузка операторов

Материал из cppreference.com
< cpp‎ | language


Перегрузка операторов может быть как полезной, так и опасной. С одной стороны, перегружая операторы созданного Вами класса может помочь в понимании и читабельности кода. С другой стороны, Вы можете перегрузить оператор таким образом, что его использование запутает и усложнит Вашу программу. Так что используйте перегрузку осторожно. Например, никогда не перегружайте операторы &&, || или ,. При их перегрузке теряется гарантия, что левый операнд вычисляется раньше правого, на что довольно часто опираются программисты.

Есть два способа перегрузить оператор: описать глобальную функцию или метод класса.

Пример перегрузки оператора с использованием глобальной функции:

     ostream& operator <<(ostream& os, const myClass& rhs);

Однако для достижения сокрытых приватных данных пользовательского класса Вам нужно объявить эту функцию дружественной для класса.

Пример:

     class myClass {
 
       // Дает доступ функции 'operator <<' доступ к 'myData'
       // (это описание не должно находиться в public, private или protected)
       friend ostream& operator <<(ostream& lhs, const myClass& rhs);
 
       private:
         int myData;
     }

Перегрузка же с помощью метода выполняется вот таким образом:

     class myClass {
 
       public:
         // Левый операнд операции сложения - '*this'.
         int operator +(const myClass& rhs);
 
       private:
         int myData;
     }