私は最近ゲームのソースコードを見ていました。このデザインは、MenuSceneのPlaySceneなど他のタイプのSceneを継承する '抽象' Sceneクラスを宣言します。 Sceneクラスはすべてのメソッドが仮想として宣言されています。しかし、このクラスのソースコードを調べると、これらのメソッドはすべて空の本体として実装されます。これはちょうど悪いコードですか、なぜこれらのメソッドを純粋な仮想として宣言しないのか何らかの理由がありますか?空のボディを持つ仮想メソッドと純粋な仮想メソッドの違いは何ですか?
2
A
答えて
4
純粋な仮想メソッドを使用すると、クラスが「抽象的」になり、そのインスタンスをインスタンス化できなくなります。空の仮想メソッドを使用すると、クラスをインスタンス化できます。
これはちょうど悪いコードですか、なぜこれらのメソッドを純粋な仮想として宣言しないのかなんらかの理由がありますか?
いいえ、悪いコードのようです。継承されたときに基底クラスが "null"メソッドを提供しないようにしない限り、これらのメソッドがビヘイビアの拡張として意図されている場合は異常ではありません。
つまり、セマンティックが「このクラスを拡張し、実際に必要な機能だけをオーバーロードしている」場合は、それは完璧です。これは、これらのメソッドがフックとして処理され、フレームワークによって特定の瞬間に呼び出されたときによく使用されます。
関連する問題
- 1. 純粋仮想と仮想の違い
- 2. 純粋仮想メソッドと仮想メソッドを混在させたクラス
- 3. SWIG JAVA%のインターフェースと、純粋仮想メソッド
- 4. 仮想の有無にかかわらず純粋な仮想メソッドの実装?
- 5. 動的メソッドと仮想メソッドの違いは何ですか?
- 6. 純粋仮想デストラクタ
- 7. 実装されていない純粋な仮想メソッド
- 8. 仮想マシンと仮想デスクトップの違いは何ですか?
- 9. 純粋仮想デストラクタは
- 10. 純粋な仮想メソッドを使用したC++クラスのクローニング
- 11. "純粋な仮想メソッド"を解決する方法
- 12. デフォルト純粋仮想デストラクタ
- 13. C++ map.clear()純粋仮想メソッドランタイムエラー
- 14. スレッド内で純粋仮想メソッドを呼び出す
- 15. C++ temporary - "純粋仮想メソッド"と呼ばれる
- 16. C++の純粋仮想メソッドのメモリ管理の問題
- 17. WCF仮想メソッド
- 18. 仮想メソッド
- 19. C++仮想メソッド
- 20. 純粋仮想メソッドがconst参照を返す
- 21. なぜこの純粋な仮想メソッドはコンパイルされませんか?
- 22. 純粋仮想メソッド呼び出しエラーGoogleプロトコルバッファ
- 23. C++、私は適切なクラスの静的メソッドを呼び出す仮想メソッド持つ仮想関数
- 24. C++の仮想デストラクタから仮想メソッドを呼び出す
- 25. 純粋仮想関数のオーバーロード
- 26. 純粋仮想関数のエラー
- 27. 仮想拡張メソッド?
- 28. Moqと仮想プロパティとメソッド
- 29. codenameoneアプリエラーなし仮想メソッド
- 30. GmockでCppの別の非仮想メソッドで非仮想メソッドをモック
機能を持たないクラスをインスタンス化する理由を教えてください。 – FlipFlop
@FlipFlopおそらく単なる副作用です。 – Shoe
@FlipFlopだから、後でそれを継承するもので置き換えることができますが、実際にはいくつかの関数をオーバーライドすることによって事態を行います。 – Quentin