<< と >> をオーバーロードして 2 つの値を表示するのに役立ちます

StackOverflow https://stackoverflow.com/questions/1811358

  •  06-07-2019
  •  | 
  •  

質問

初歩的な質問かもしれませんが、手持ちの本を見ても分かりません。クラスのコンストラクターは 2 つの double を初期化し、次のコードでこれら 2 つの double を << で出力したいと考えています。

Complex x( 3.3, 1.1 );

cout << "x: " << x;

この後、これらに 2 つの double を受け入れるために >> をオーバーロードする必要があります。初めての質問ですので、提供した情報が不足している場合はお知らせください。

編集:コンストラクターとオーバーロードステートメントは次のようになります。

#include "Complex.h"

Complex::Complex( double realPart, double imaginaryPart )
: real( realPart ),
imaginary( imaginaryPart )
{

}

std::istream& operator>>(std::istream& strm, const Complex &c)
{
   double r,i;
   strm >> r >> i;
   c = Complex(r,i);
   return strm;
}

「const complex&c」と「c = complex(r、i);」を変更しなければならないことを知っています。しかし、私はそれについてどのように進むべきかわかりません。また、同じ考え方に基づいていますが、これは std ライブラリの Complex クラスに関するものではないことをここで断っておきます。これまでのところ、誰もが大いに助けてくれましたが、今日は私が愚かなケースを抱えています。

役に立ちましたか?

解決

演算子<< :

std::cout です std::ostream オブジェクトなのでオーバーロードする必要があります operator<< のために ostream, 、かかります std::complex<double> 引数として使用すると仮定すると、 std::complex<double> 標準ヘッダー複合体から。標準のコンテナおよびクラスに内部変更を加えるべきではないため、スタンドアロンにします。

#include <iostream>
#include <complex>

std::ostream& operator<<(std::ostream& strm, const std::complex<double>& c)
{
    strm << "real: " << c.real() << "imag: " << c.imag();
    return strm;
}

オペレータ>> :

operator>> かかります std::istream オブジェクト、それは何の逆のことをするか std::ostream そうです。このようにシリアル化にストリームを使用する場合は、それらの例外も有効にすることをお勧めします。通常、あなたはただ着たいだけです std::ios::badbit.

#include <iostream>
#include <complex>

std::istream& operator>>(std::istream& strm, std::complex<double>& c)
{
    double r,i;
    strm >> r >> i;
    c = std::complex<double>(r,i);
    return strm;
}

クラスの内部メンバーにアクセスする必要がある場合は、オーバーロードされた関数をフレンドとして定義します。ただし、 std::complex::real() と std::complex::imag() はパブリック インターフェイスの一部であるため、ここでは必要ありません。istream の例では、パブリック インターフェイスの一部であるコピー コンストラクターを単に呼び出すだけです。

ここでは cin と cout を使用したいのだと思います。ただし、他の何かのために演算子をオーバーロードしたい場合も、同じことが当てはまります。クラス定義内に演算子を実装すると、 this ポインターであるため、演算子関数は引数を 1 つだけ取る必要があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top