関連する質問をいくつか見ましたが、これとまったく同じではありません...
クラスはいくつかの主要なカテゴリに当てはまるものとして扱ってきましたが、簡単にするために次の 4 つとしましょう。
いくつかのデータと一連の操作を持つ値クラス。それらはコピーされ、同等かどうか意味のある比較ができます (コピーは を介して同等であると予想されます
==
)。 これらにはほとんどの場合、仮想メソッドがありません。割り当てとコピーを無効にする ID を持つインスタンスを持つ一意のクラス。
operator==
オブジェクトとしてではなくポインターとして比較するため 、通常、これらにはありません。ポインターまたは参照によってそれらを渡すことを余儀なくされているため、オブジェクトスライスのリスクがないため、これらには非常に多くの仮想メソッドがあります。Unique-but-Clonable Classesコピーを無効にしますが、それが本当に必要な場合はクローン作成をサポートするように事前に設計されています。 これらには仮想メソッドがあり、最も重要なのは、仮想構築/クローニングイディオムに従うものです
保持しているもののプロパティを継承する コンテナ クラス。これらには仮想メソッドがない傾向があります...たとえば、「STL コンテナーに仮想デストラクタがないのはなぜですか?」を参照してください。.
この非公式な信念体系を保持しているにもかかわらず、私は何度か、コピー可能なものに仮想メソッドを追加しようとしました。「これができたらカッコイイ」と思っていたのに、どうしても壊れてしまう。
これにより、仮想メソッドを持ち、コピーを無効にしない型の実際の良い例を誰かが持っているのではないかと思いました。