私は C++ 言語の初心者で、このコードについていくつか質問があります。一部の演算子をオーバーロードしようとしています。
string& operator = (char R) { string T = R ; *this = T; return *this; }
最初の質問:コンストラクターが仕事をすることができるのに、なぜ等号演算子をオーバーロードする必要があるのですか?
2 番目の質問: (関係ありません) とはどういう(char R)
意味ですか?
私は C++ 言語の初心者で、このコードについていくつか質問があります。一部の演算子をオーバーロードしようとしています。
string& operator = (char R) { string T = R ; *this = T; return *this; }
最初の質問:コンストラクターが仕事をすることができるのに、なぜ等号演算子をオーバーロードする必要があるのですか?
2 番目の質問: (関係ありません) とはどういう(char R)
意味ですか?
最初の質問:コンストラクターが仕事をすることができるのに、なぜ等号演算子をオーバーロードする必要があるのですか?
コンストラクターはオブジェクトを「構築」するように設計されています...コピーコンストラクターと呼ばれるものがありますが、既存のオブジェクトを同じ(または変換可能な)タイプの別の既存のオブジェクトに実際にコピーするようには設計されていません...それが の仕事ですoperator=
。また、メソッドを「オーバーロード」するのoperator=
ではなく、オブジェクトタイプのデフォルトのコンパイラ作成メソッドの代わりに使用するメソッドのユーザー定義バージョンを作成します。これは、メモリフットプリントのビットを単純にブルートフォースコピーしますあるオブジェクトを別のオブジェクトに...オブジェクトが独自のポインターなどを管理している場合、そのようなブルートフォースコピーは、ポインターの所有権があいまいになるなど、非常に悪いことになる可能性があります.
C++での演算子のオーバーロード。ここで最高のバージョンの1つ。
http://msumca2012.blogspot.in/2013/03/oop-41-operator-overloading-in-c.html
(char R)
は演算子の右側の引数です (ここでは=
)
初期化後に値を設定できるように、それを行いたい
//constructor
Foo a('f')
//copy constructor
Foo b = Foo('p');
// operator=
b = 'g';
(char R)
通常の関数への引数があるのと同じように、演算子への引数です。