簡単に言えば、C++ で単一レベルの継承用のインターフェイスを作成するにはどうすればよいでしょうか (単純さと教訓的な理由から)。ポリモーフィズムを使用していないが、基本クラスに仮想抽象メソッド ( ) が含まれているコードを見ましたvirtual void TheMethod() = 0
。
純粋仮想メソッドを使用してこの抽象クラスからクラスが派生しましたが、後続のコードでは、派生クラスのインスタンスが動的割り当てをまったく使用せずに使用されました。
これは正しい方法ですか?ポリモーフィック デザインの使用によって推測されるオーバーヘッドについてはどうでしょうか。
これは問題外だと思います..これは、そのメソッドが純粋な仮想メソッドであっても、基本メソッドを非表示/ゴースト化するように見えます。
後で編集:いくつかの良い答えを提供してくれたすべての人々に感謝します。ポリモーフィズムと互換性のある唯一のものとして、このオブジェクト作成の可能性を強調する意味で、「動的割り当て」の使用から生じた重大なエラーに下線を引きたいと思います. この実行時の呼び出し動作を利用する唯一の方法 (しかし、おそらく最も一般的な方法) ではないことは明らかですが、私の元の質問をさらに明確にするために:
純粋仮想メソッドを使用せずにプログラマーにメソッドを実装させる方法はありますか? 私のおそらく不当な懸念は、ポリモーフィック デザインへの扉を開いたことが、パフォーマンス面でも少し重いかどうかということです (議論中のメソッドに対して 1 秒あたり数千回のそのような呼び出しについて話します)。
後で編集:ベースに保護されたコンストラクターを持たせることは、直接インスタンス化できないことを意味し(ファクトリーまたは他の友好的な手段を使用することを除いて)、これにより、純粋な仮想メソッドが誘発する効果の1つを補うことができます。しかし、派生クラスが独自のメソッド実装を提供していることを確認するにはどうすればよいでしょうか? 関連付けられた vtable を持つという誇張された懸念が実際にはそれほど大したことではない場合は、純粋な仮想メソッドを使用することに固執します (SFINAE の奇妙な繰り返しのテンプレート パターンは、そうでない人にとっては読みにくく、理解するのが難しいためです)。中級以上の C++ プログラマー - 私のように :) )。