2016-07-22 21 views
2

私は最近ゲームのソースコードを見ていました。このデザインは、MenuSceneのPlaySceneなど他のタイプのSceneを継承する '抽象' Sceneクラスを宣言します。 Sceneクラスはすべてのメソッドが仮想として宣言されています。しかし、このクラスのソースコードを調べると、これらのメソッドはすべて空の本体として実装されます。これはちょうど悪いコードですか、なぜこれらのメソッドを純粋な仮想として宣言しないのか何らかの理由がありますか?空のボディを持つ仮想メソッドと純粋な仮想メソッドの違いは何ですか?

答えて

4

純粋な仮想メソッドを使用すると、クラスが「抽象的」になり、そのインスタンスをインスタンス化できなくなります。空の仮想メソッドを使用すると、クラスをインスタンス化できます。

これはちょうど悪いコードですか、なぜこれらのメソッドを純粋な仮想として宣言しないのかなんらかの理由がありますか?

いいえ、悪いコードのようです。継承されたときに基底クラスが "null"メソッドを提供しないようにしない限り、これらのメソッドがビヘイビアの拡張として意図されている場合は異常ではありません。

つまり、セマンティックが「このクラスを拡張し、実際に必要な機能だけをオーバーロードしている」場合は、それは完璧です。これは、これらのメソッドがフックとして処理され、フレームワークによって特定の瞬間に呼び出されたときによく使用されます。

+0

機能を持たないクラスをインスタンス化する理由を教えてください。 – FlipFlop

+0

@FlipFlopおそらく単なる副作用です。 – Shoe

+0

@FlipFlopだから、後でそれを継承するもので置き換えることができますが、実際にはいくつかの関数をオーバーライドすることによって事態を行います。 – Quentin

関連する問題