0

たとえば、次のようになります。

const Ball& operator=(const Ball& other)
{
   // Irrelevant code

   return *this;
}

カスケードのためにオブジェクトへの参照を返すと聞いたことがあります。

Ball a,b,c;
// Unimportant initializations
a=b=c;

しかし、メソッドを次のようにできないのはなぜですか。

const Ball operator=(const Ball& other)
{
   // Irrelevant code

   return *this;
}

またはこれ:

const Ball* operator=(const Ball& other)
{
   // Irrelevant code

   return this;
}

次のようなことをするとどうなりますか:

Ball *a, *b, *c;
// Unimportant initializations
a = b;

これは、私が提供した両方の方法で機能しますか?

これらがばかげた質問である場合は、申し訳ありません。私はまだ C++ の初心者です。どんな助けでもいいでしょう。

4

6 に答える 6

0

このスニペットは合法です:

int a;
(a = 2)++;

1 つのステートメントで、 に代入2aてからインクリメントしますa。これは、a = 2が への参照に評価される必要があることを意味しaます。

ユーザーが作成した型でこの動作を複製するには、代入演算子が参照を返す必要があります。

于 2013-10-09T20:15:44.273 に答える
0

const 参照がある場合、それに割り当てることはできません。ポインターを返す場合も、オブジェクト インスタンスではなく、ポインター値を割り当てます。

ほとんどの場合、「int セマンティクス」と呼ばれるものに固執するのが理にかなっていますが、クラスは同じように動作intします。特に、カスケードを機能させる必要があります。

于 2013-10-09T20:07:50.623 に答える
0

次のように定義できます。

const Ball operator=(const Ball& other)
{
   // Irrelevant code
   return *this;
}

ただし、一時コピーを返却します。コンパイラは、最適化時にこれを修正する可能性があります。a = b = cさらに、 を受け取るときに連鎖すると、参照を一時operator=const Ball&に渡します。

連鎖できないため、ポインターを返すことはできません。また、さまざまなデータ型 (左側のポインター、右側の const 参照) を扱っているため、ポインターを返すことはできません。

于 2013-10-09T20:14:47.117 に答える