0
friend istream& operator>>(istream &is, Complex &c) {
    int re;
    int im;

    is >> re >> im;
    c.setReal(re);
    c.setImaginary(im);

    return is;
}   

これを1行または2行で行う方法はありますか? たぶん、

is >> setReal() >> setImaginary();

これらの関数は int を取りますが、それをどのようにコーディングするかわかりません。

4

1 に答える 1

2

関数が であるとするfriendと、クラスのすべてのデータ メンバーにアクセスできます。実数成分と虚数成分のそれぞれにデータ メンバーがあると想定しているため、コードを変更して set 関数を回避できます。

friend istream& operator>>(istream &is, Complex &c)
{
    return is >> c.re_ >> c.im_;  // or whatever you've called the data members...
}

一般的なガイドラインとして、冗長であってもパブリック インターフェイスを使用することをお勧めします。これは、一部のプライベート実装の詳細を変更した (たとえば、メンバー変数の名前を変更したり、クラスをライブラリの複雑なクラスのラッパーになる)が、ここで簡潔さを重視する場合は、それを選択してください。

ところで /- Kerrek のコメントは正しいです。あなたのコードは正しく失敗しません。実数または虚数の変換が失敗した場合に、Complex オブジェクトとストリームの両方をどのような状態のままにするかを検討する必要があるかもしれません....

于 2013-02-19T02:17:42.273 に答える