0

cli/c++ 環境での演算子のオーバーロードについて質問があります

static Length^ operator++(Length^ len)
{
   Length^ temp = gcnew Length(len->feet, len->inches);
   ++temp->inches;
   temp->feet += temp->inches/temp->inchesPerFoot;
   temp->inches %= temp->inchesPerFoot;
   return temp;
}

(コードは、ivor horton の本からのものです。)

ヒープを返すためだけに、ヒープ上で新しいクラス オブジェクト (temp) を宣言する必要があるのはなぜですか? 過負荷に関する情報をグーグルで検索しましたが、実際にはあまり多くはなく、ちょっと迷っています。

4

2 に答える 2

1

はい、ここでPOST -increment 演算子をオーバーロードしているためです。したがって、新しい値が存在するにもかかわらず、元の値がコード内で頻繁に使用され、コピーされて別の場所に保存される可能性があります。例:

store_length_somewhere( len++ );

は増加しlenますが、元の値は関数によって別の場所に格納される可能性があります。つまり、同時に 2 つの異なる値が必要になる場合があります。それゆえ、新しい価値の創造と回帰。

于 2011-08-28T05:24:29.237 に答える
1

これは、.NET で演算子のオーバーロードを実装する方法です。オーバーロードされた演算子は、現在のインスタンスを変更する代わりに、新しいインスタンスを返す静的関数です。したがって、後置演算子と前置 ++ 演算子は同じです。演算子のオーバーロードに関するほとんどの情報は、ネイティブ C++ に関するものです。C# サンプルを探して、.NET 固有の情報を確認できます。たとえば、次のよう になります。自動的に収集される多数の軽量の新しいインスタンス。これが、.NET のオーバーロードされた演算子がネイティブ C++ よりも単純である理由です。

于 2011-08-28T05:33:07.043 に答える