Я пытаюсь реализовать класс COMPLEX в С++ и перегружать арифметические операторы, а также операторы «‹‹» и «>>» для ввода/вывода. По отдельности, а также при каскадировании арифметические операторы работают должным образом, но я не могу получить правильные результаты при попытке выполнить такие операторы, как:
cout << "something" << complex1 + complex2 << "\n";
где комплекс1 и комплекс2 — объекты класса КОМПЛЕКС.
фрагменты определения класса:
class COMPLEX{
int a; // Real part
int b; // Imaginary part
public:
COMPLEX operator = (COMPLEX );
COMPLEX operator + (COMPLEX ) const;
friend istream& operator >> (istream &, COMPLEX &);
friend ostream& operator << (ostream &, COMPLEX &);
-snip-
}
COMPLEX COMPLEX::operator = (COMPLEX t_c) {
return COMPLEX(a = t_c.a, b = t_c.b);
}
COMPLEX COMPLEX::operator + (COMPLEX t_c) const{
return COMPLEX(a + t_c.a, b + t_c.b);
}
istream& operator >> (istream &i_s, COMPLEX &t_c){
i_s >> t_c.a >> t_c.b;
return i_s;
}
ostream& operator << (ostream &o_s, COMPLEX &t_c){
o_s << t_c.a << "+" << t_c.b << "i";
return o_s;
}
помимо этого у меня также есть перегруженный оператор.
Всякий раз, когда я пытаюсь каскадировать ‹‹ с любым другим перегруженным оператором, перегруженная функция ‹‹ не вызывается. Вместо этого вызывается оператор, и результат этого отображается.