クラスCOMPLEXをC++で実装し、算術演算子と入出力用の「<<」および「>>」演算子をオーバーロードしようとしています。個別に、またカスケードされた場合、算術演算子は期待どおりに機能しますが、次のようなステートメントを実行しようとすると、正しい結果を取得できません。
cout << "something" << complex1 + complex2 << "\n";
ここで、complex1とcomplex2は、COMPLEXクラスのオブジェクトです。
クラス定義のスニペット:
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;
}
これとは別に、演算子もオーバーロードしています。
他のオーバーロードされた演算子で<<をカスケードしようとすると、オーバーロードされた<<friend関数が呼び出されません。代わりに、オペレーターが呼び出され、その結果が表示されます。