Перегрузка операторов
Перегрузка операторов может быть как полезной, так и опасной.
С одной стороны, перегружая операторы созданного Вами класса может помочь в понимании и читабельности кода. С другой стороны, Вы можете перегрузить оператор таким образом, что его использование запутает и усложнит Вашу программу. Так что используйте перегрузку осторожно. Например, никогда не перегружайте операторы &&, || или ,.
При их перегрузке теряется гарантия, что левый операнд вычисляется раньше правого, на что довольно часто опираются программисты.
Есть два способа перегрузить оператор: описать глобальную функцию или метод класса.
Пример перегрузки оператора с использованием глобальной функции:
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; }