ここでは、io 演算子のオーバーロードに関する非常に優れたリファレンス(コードの一部を修正する必要があったため、あまり適切ではないようです) を示します。クラスの詳細を知らずにこれ以上のことは言えませんが、ストリーム演算子の優れた点は、stdin や stdout だけでなく、任意のストリーム型オブジェクトへのインターフェイスを提供することだと言えます。サイトからの小さな例を次に示し
ます。class Point { プライベート: double m_dX, m_dY, m_dZ;
public:
Point(double dX=0.0, double dY=0.0, double dZ=0.0)
{
m_dX = dX;
m_dY = dY;
m_dZ = dZ;
}
friend ostream& operator<< (ostream &out, Point &cPoint);
friend istream& operator>> (istream &in, Point &cPoint);
double GetX() { return m_dX; }
double GetY() { return m_dY; }
double GetZ() { return m_dZ; }
};
ostream& operator<< (ostream &out, Point &cPoint)
{
// Since operator<< is a friend of the Point class, we can access
// Point's members directly.
out << cPoint.m_dX << " " << cPoint.m_dY << " " << cPoint.m_dZ << std::endl;
return out;
}
istream& operator>> (istream &in, Point &cPoint)
{
in >> cPoint.m_dX;
in >> cPoint.m_dY;
in >> cPoint.m_dZ;
return in;
}
IMO これらの演算子のオーバーロードについて考える最善の方法は、以前に記述された>>
andを活用<<
することです。そのようにしてチェーンを構築すると、これらの演算子を実装するのが非常に簡単で便利になります。