私はC++でクラスCOMPLEXを実装しようとしており、算術演算子に加えて入出力のために '< <'と '>>'演算子もオーバーロードしています。個別とも予想されるように算術演算子の仕事をカスケード接続する場合 - しかし、のようなステートメントを実行しようとしたとき、私は正しい結果を得ることができません:complex1とcomplex2がクラスCOMPLEXのオブジェクトであるオーバーロードされた算術演算子を使用して、オーバーロードされた抽出演算子をカスケードすることは可能ですか?
cout << "something" << complex1 + complex2 << "\n";
を。クラス定義の
スニペット:
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;
}
これとは別に、私はまた、演算子をオーバーロードしています。
他のオーバーロードされた演算子と一緒に< <をカスケードしようとすると、オーバーロードされた< <フレンド関数が呼び出されません。代わりにオペレータが呼び出され、その結果が表示されます。
ありがとう:)私が探していた説明だけ – kny8mare