1

クラス Complex の << 演算子をオーバーロードしたいと考えています。

プロトタイプは次のとおりです。

void Complex::operator << (ostream &out)
{
    out << "The number is: (" << re <<", " << im <<")."<<endl;
}

それは機能しますが、次のように呼び出す必要があります: object << cout 標準出力用。cout << object のように、逆方向に動作させるにはどうすればよいですか?

「this」ポインターはデフォルトでメソッドに送信される最初のパラメーターであることを知っているため、二項演算子は obj << ostream のみを機能させることができます。グローバル関数としてオーバーロードしましたが、問題はありませんでした。

<< 演算子をメソッドとしてオーバーロードし、それを ostream << obj と呼ぶ方法はありますか?

4

3 に答える 3

2

free functionの通常の C++ パターンを使用するだけです。クラスのプライベート データ メンバーをクラスから見えるようにしたい場合は、クラスfriendにすることができますが、通常、複素数クラスは実部と虚数係数のパブリック ゲッターを公開します。ComplexComplex

class Complex
{
  ....

   friend std::ostream& operator<<(std::ostream &out, const Complex& c);
private:
   double re;
   double im;
};

inline std::ostream& operator<<(std::ostream &out, const Complex& c)
{
    out << "The number is: (" << c.re << ", " << c.im << ").\n";
    return out;
}
于 2013-01-30T10:46:09.150 に答える
1

フリースタンドoperator<<関数を書くことができます。試してみてください:

std::ostream& operator<< (std::ostream &out, const Complex& cm)
{
    out << "The number is: (" << cm.re <<", " << cm.im <<")." << std::endl;
    return out;
}
于 2013-01-30T10:38:29.827 に答える
0

グローバル関数を定義できます。

void operator << (ostream& out, const Complex& complex)
{
     complex.operator<<(out);
}
于 2013-01-30T10:42:54.207 に答える