5

私はいつも思っていた...

  • オーバーライドとは、基本クラスで関数 (同じシグネチャ) を再実装することを意味しますが、
  • オーバーロードとは、同じ名前で署名が異なる関数を実装することを意味します

...そして、違いを気にしない人もいるため、混乱しました。

新規/削除に関して: それらは過負荷または上書きされていますか?

アイデア:

  • Class = overload に new/delete 演算子を実装する
  • グローバルな new/delete = override の再実装

修正/提案/異議はありますか? 質問にタグを付けてください。

4

1 に答える 1

7

グローバルoperator newandoperator deleteの場合、実際にはオーバーロードでもオーバーライドでもありません。プログラムは、デフォルトの実装提供の定義を独自の定義に置き換えることができます。C++ 標準は次のように述べています (§3.7.3/2):

ライブラリは、グローバル割り当ておよび割り当て解除関数のデフォルト定義を提供します。一部のグローバル割り当ておよび割り当て解除関数は置き換え可能です (18.4.1)。C++ プログラムは、置換可能な割り当てまたは割り当て解除関数の定義を最大 1 つ提供する必要があります。そのような関数定義は、ライブラリ (17.4.3.4) で提供されるデフォルト バージョンを置き換えます。

クラス固有のoperator neworoperator deleteの場合、演算子はオーバーロードされます。

于 2010-09-18T17:59:13.727 に答える