4

重複の可能性:
コピー代入演算子が参照/定数参照を返さなければならないのはなぜですか?
Operator= C++ でのオーバーロード

この代入演算子のオーバーロードについては、すでに質問しました。私はばかげた質問をしているかもしれません。すみません。

私のクラス宣言は次のようなものです:

class Circle
{
    public:
       Circle();
       Circle(const Circle &);
       Circle(unsigned short rad);
       unsigned short getRadius() const { return itsradius; }
       void setRadius(unsigned short rad) { itsRadius = rad; }
    private:
       unsigned short itsRadius:
};

私のクラス定義:

Circle::Circle()
{
   itsRadius = 0;
}
Circle::Circle(unsigned short rad)
{
   itsRadius = rad;
}
Circle::Circle(const Circle & rhs)
{
   itsRadius = rhs.getRadius();
}

次のように代入演算子をオーバーロードしています。

SimpleCircle & SimpleCircle::operator=(const SimpleCircle & rhs)
{
   itsRadius = rhs.getRadius();
   return *this;
}

「itsRadius = rhs.getRadius()」のように現在のオブジェクトで作業している場合、現在のオブジェクトの半径が変更されます。その場合、「*this」を返す必要はありません。この関数を void として書き直すことはできますか? 問題はありますか?それとも従うべき基準ですか?

4

4 に答える 4

11

operator=これは、組み込み型の動作と一貫性を保つために従うべき良い規則です。

組み込みの型を使用すると、次のようなことができます。

int a, b, c;
// ...
a = b = c = 10;

への参照を返さない場合*this、割り当てチェーンはタイプでサポートされません。

于 2012-04-14T10:49:43.717 に答える
1

戻る*thisと、次のような割り当てを連鎖させることができます。

SimpleCircle a, b, c(10);
a = b = c;
于 2012-04-14T10:50:22.727 に答える
1

これは慣例です。wikipediaRichard Gillam によるリンクされた記事を参照してください。

于 2012-04-14T10:52:13.803 に答える
1

次のように、1 つのステートメントで複数のインスタンスに割り当てることができます。

s1 = s2 = s3;
于 2012-04-14T10:55:25.693 に答える