9

今のところ、ヘッダー ファイルはまったく使用していません。クラスはそれぞれ.cpp完全に 1 つのファイルにあります。しかし、コンパイル時間を節約するために、今すぐヘッダー ファイルを利用したいと考えています。Visual Studio が、デバッグ ビルド用に変更されていないクラスをコンパイルしないことを願っています。

ヘッダー ファイルにパブリック メソッドとメンバーのみを記載する方法はありますか。理論的には、コンパイラにとって十分な情報です。たとえば、別のファイルにmain.cppクラスヘッダーが含まれている場合、プライベートメソッドとメンバーは必要ありませんか?

プライベート メソッドとメンバーの名前を再入力せずにヘッダー ファイルを使用するにはどうすればよいですか? 私がそうしたいと思う理由は、コーディングの生産性です。別のメソッドで使用されるクラスに小さなヘルパー関数を追加したい場合、その署名をヘッダー ファイルにも追加する必要はありません。

4

3 に答える 3

11

別のファイル、たとえば main.cpp にクラス ヘッダーが含まれている場合、プライベート メソッドとメンバーは必要ありませんか?

いいえ、publicメソッドとメンバーは必ずしも十分ではありません。たとえば、別の.cppファイルがクラスのインスタンスを作成しようとした場合:

SomeClass instance;

コンパイラは、とりわけ、 に割り当てるメモリの量を知る必要がありますSomeClass。そのためには、SomeClassのプライベート データ メンバーを完全に把握している必要があります。

あなたが質問を組み立てている方法は、あたかも言語と戦うことに熱心であるかのように聞こえます. それは良い方法だとは思いません。最善の方法は、選択した言語で通常行われている方法で物事を行い、特定の明確に理解された必要性がある場合にのみ、それから離れることだと思います.

C++ で通常行われる方法は、クラス宣言全体をヘッダー ファイルに入れ、定義を何らかの方法でヘッダー ファイルと対応する.cppファイルに分割することです。正確な分割は、さまざまな技術的考慮事項によって決定されます。たとえば、テンプレートとインライン関数は通常、ヘッダー ファイルに表示する必要があります。一方、コードをヘッダー ファイルに配置すると、依存関係が増加し、ビルド時間が長くなる可能性があります。

これらの問題に対処する方法があります。ただし、これには余分な複雑さが伴うため、明確に識別可能な必要性がある場合にのみ実行する必要があると私は主張します。

于 2013-04-06T09:29:03.647 に答える
4

あなたが求めていることを行う方法はわかりませんが、分離する別の方法があります。個人情報を分離するpimpl イディオムをご覧になることをお勧めします。少し手間がかかりますが、特に大規模なプロジェクトでは非常に便利です。

于 2013-04-06T09:35:30.460 に答える
4

すべての関数宣言はヘッダー ファイルに入れ、すべての関数定義は cpp ファイルに入れる必要があります。宣言を cpp ファイル内に置くことは、適切なコーディング方法ではありません。

ただし、テンプレートまたはインライン関数を記述する場合は、ヘッダー内に定義を入れることができます。

ヘッダー ファイルでクラスを宣言したら、クラスがcpp ファイルで宣言されていないことを考えると、ヘッダーのクラスの宣言内ですべてのメソッドとメンバーを宣言する必要があります。

于 2013-04-06T09:29:18.713 に答える