-1

私は現在、C++ の割り当てに取り組んでおり、3 種類のオブジェクトがあります。CustomerHireおよびTour。オブジェクトを作成するときは、次のようにします。ファイルからデータを読み取り、次のようにします。

Customer* cust = new Customer(custId, Name, ...);

ただし、>>演​​算子を使用してこの情報をオブジェクトに読み込む必要があります。<<書き戻しも使用します。どうすればこれを達成できますか?

どうもありがとう :)

4

2 に答える 2

4

まず第一に、ヒープ上にオブジェクトを作成する必要はないでしょう。

これらの修正を行った後、挿入演算子と抽出演算子をオーバーロードできます。

// assuming you declare these operators as friends of Customer
std::ostream& operator<<(std::ostream& os, const Customer& c)
{
    os << c.data;
    return os;
}

std::istream& operator>>(std::istream& is, Customer& c)
{
    is >> c.data;
    return is;
}
于 2013-10-14T22:03:48.300 に答える
1

ここでは、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を活用<<することです。そのようにしてチェーンを構築すると、これらの演算子を実装するのが非常に簡単で便利になります。

于 2013-10-14T22:02:50.043 に答える