2

Animal クラスを継承する Dog クラスがあるとします。Dog::operator= に Animal::operator= への呼び出しを挿入するとよいでしょう。

それを書くための最も読みやすい/一般的な方法は何ですか?

あの二人は知ってると思う…

static_cast<Animal*>(this)->operator=(other);

this->Animal::operator=(other);
4

2 に答える 2

12

子クラスのメソッド内から実行しているため

Animal::operator=(other);

の必要はありませんthis->。スコープ解決構文は、要求されたことを正確に実行します。キャストで「間接的に」行う意味がわかりません。

また、キャストを使用して実行すると、仮想メソッド呼び出しの動的解決が無効にならないため、通常は期待される結果が得られない可能性があることにも注意してください。(そして、ところで、代入演算子は仮想として宣言できます)。その明らかな結果は、仮想メソッドを使用すると、「キャスト」バリアントが無限の再帰を簡単に引き起こす可能性があることです。

于 2009-11-12T14:49:48.593 に答える
6

this->Animal::operator=(other);が正しい方法です。親の実装を参照してメソッドを完全に修飾します。そのために自分自身をキャストする必要はなく、コードが読みにくくなります。

于 2009-11-12T14:46:21.937 に答える