1

プロジェクトで動作し、プロジェクトのタイプに応じてさまざまな機能を公開するアプリケーションを書いているとしましょう。さまざまな種類のプロジェクトのクラスの階層があります。

class AbstractProject
{
};

class ProjectA : public AbstractProject
{
};

class ProjectB : public AbstractProject
{
};

class ProjectC : public AbstractProject
{
};

ここで、AbstractProject *_currentProject ポインターをアプリケーションのメイン クラスのメンバーとして持つことを計画していました。起動時にダイアログ ボックスをポップアップし、選択に基づいて、次のようにします。

_currentProject = new ProjectB(); // e.g.

後で、さまざまなプロジェクトに固有の機能を利用するために、ポインターを特定の型にダウンキャストする必要があります。なんだか、これが不安になります。これを行うより良い方法はありますか?

4

4 に答える 4

2

はい、可能な限り、代わりに仮想メソッドを使用する必要があります。

于 2011-01-11T12:37:08.967 に答える
2

より良い方法は、基本クラスで純粋仮想メソッドを定義し、後で派生クラスのオーバーロードですべての特定の機能を実装することです。次に、そのメソッドを呼び出します。

于 2011-01-11T12:37:41.193 に答える
1

Command と Visitor パターンの両方がここに適用されます。どちらが自分のケースにより適しているかを自分で判断する必要があります。

http://en.wikipedia.org/wiki/Command_pattern

http://en.wikipedia.org/wiki/Visitor_pattern

于 2011-01-11T12:40:04.967 に答える
0

純粋なオブジェクト指向では、誰もが提案したような仮想メソッドが必要です。ただし、特定のメンバー関数を使用する必要がある場合は、コマンド、ビジター、またはデコレータなどのデザイン パターンのいずれかを使用してみてください...

于 2011-01-11T12:42:38.797 に答える