1

私は C++ 言語の初心者で、このコードについていくつか質問があります。一部の演算子をオーバーロードしようとしています。

string& operator = (char R) { string T = R ; *this = T; return *this; }

最初の質問:コンストラクターが仕事をすることができるのに、なぜ等号演算子をオーバーロードする必要があるのですか?
2 番目の質問: (関係ありません) とはどういう(char R)意味ですか?

4

4 に答える 4

2

最初の質問:コンストラクターが仕事をすることができるのに、なぜ等号演算子をオーバーロードする必要があるのですか?

コンストラクターはオブジェクトを「構築」するように設計されています...コピーコンストラクターと呼ばれるものがありますが、既存のオブジェクトを同じ(または変換可能な)タイプの別の既存のオブジェクトに実際にコピーするようには設計されていません...それが の仕事ですoperator=。また、メソッドを「オーバーロード」するのoperator=ではなく、オブジェクトタイプのデフォルトのコンパイラ作成メソッドの代わりに使用するメソッドのユーザー定義バージョンを作成します。これは、メモリフットプリントのビットを単純にブルートフォースコピーしますあるオブジェクトを別のオブジェクトに...オブジェクトが独自のポインターなどを管理している場合、そのようなブルー​​トフォースコピーは、ポインターの所有権があいまいになるなど、非常に悪いことになる可能性があります.

于 2013-03-09T12:56:34.943 に答える
0

C++での演算子のオーバーロード。ここで最高のバージョンの1つ。

http://msumca2012.blogspot.in/2013/03/oop-41-operator-overloading-in-c.html

于 2013-03-10T15:40:58.947 に答える
0

(char R)は演算子の右側の引数です (ここでは=)

初期化に値を設定できるように、それを行いたい

//constructor
Foo a('f')
//copy constructor
Foo b = Foo('p');
// operator=
b = 'g';
于 2013-03-09T12:57:47.203 に答える
0

(char R)通常の関数への引数があるのと同じように、演算子への引数です。

于 2013-03-09T12:57:57.470 に答える