10

これは、C ++に固有の質問ではなく、オブジェクト指向プログラミングに関係する質問ではない場合があります。私はこれに不慣れで、自分のデザインに疑問を持っています。 基本的に、式の解析、中置から後置への変換などを処理する多くの関数を実装するクラスParserがあります。これらのParser関数をmain関数で使用します。このクラスにはデータメンバーは必要ないことに気づきました。したがって、このクラスのオブジェクトは実際には必要ありません。したがって、クラス内のすべての関数を静的にすることになりました。このデザインに何か奇妙なことがありますか?代わりにこれをインターフェースとして使用する必要がありますか?助言がありますか?

4

4 に答える 4

7
  1. あなたはパーサーが必要であり、それがあなたのために何をしたいのかを知っています-これは事実上、あなたの「インターフェース」です。

  2. パーサーの現在の実装にはメンバー変数は必要ありません。したがって、インターフェイスを実装するためにクラスは必要ありません。そうです、静的メソッドを廃止します。Kevinが言うように、単純な古い関数(非静的)で名前空間を使用することは素晴らしいアイデアです。

  3. 内部状態を維持する必要がある新しいパーサーを追加する必要があると思われる場合は、おそらく(1)でインターフェイスを定義する必要があります-選択した名前空間内に関数宣言を含むプレーンな古い公開ヘッダーファイルで十分です。

于 2013-02-15T00:06:18.833 に答える
6

静的関数しか持たないクラスは、名前空間とはかなり区別がつかないように思えます。では、名前空間を使用しないのはなぜですか?

于 2013-02-14T23:57:46.057 に答える
1

この質問を決定する方法は、関数がどのように使用されるかということです。

1)すべての関数が1つのファイルで使用され、どこにもエクスポートする必要がない場合は、必ず静的関数を使用してください。なんで?.cppファイルのクラスの本体に直接入力するだけで、宣言の維持やパラメーターの整列の維持について心配する必要がないためです。C ++クラスが解析されると、クラス本体内で定義された各関数内のすべてのコードがスキップされ、すべてのクラスメンバーが宣言されると解析されるため、関数はすべて相互に認識でき、より適切な名前の状況になります。コンパイラまた、そのようなクラスで直接宣言すると、多くの小さな関数がインライン化されます。

2)関数を現在の.cppファイルの外部から使用する必要がある場合は、通常の関数を使用します。後でどこからでも使用でき、名前でエクスポートする方が簡単だからです。

于 2013-02-15T00:26:59.513 に答える
0

ユーティリティ関数を静的にするのが一般的であるため、Parserクラスの関数が相互に依存しない場合は、それらを完全に静的にすることができます。それらが相互に依存していて、同じ機能を別の方法で実行できる可能性がある場合は、インターフェースの使用を検討する必要があります

于 2013-02-14T23:59:53.757 に答える