6

これが正しい方法なのか、正しい方法なのかわかりませんが、私はこれを見て使い始めました.6つのファイルがあるとします

main.cpp
main.h

car.cpp
car.h

speed.cpp
speed.h
  • 1st - main.h が必要ですか?
  • 2番目 - main.h に #include car.h と #include speed.h がある場合、car/speed.cpp に #main.h を追加するだけで済みます (つまり、car/speed.h が含まれます)。
  • 3番目 - あなたはそのルートに行くべきですか?
4

6 に答える 6

12

#includeミニマルに。インクルードの背後にある理由は、削除するとコードがコンパイルされないためです。

#include前方宣言できるときはしないでください。「クラスA;」の場合 で十分です#include a.h

特に、高度に結合されたメガ インクルード ファイルを生成するネストされたインクルードを避けて、ヘッダー ファイルで前方宣言することを好みます。

関連する質問のSelf-sufficient header filesも参照してください。

于 2013-06-26T08:30:40.443 に答える
4

main.cpp1)何かを他のファイルに公開する必要がある場合のみcpp。その内容によって異なります。

2) 可能ですが、お勧めしません。

3) いくつかの理由 (コードの設計、コンパイル時間など) から、必要最小限のものを含める必要があります。さらに、クラスが a.hと a.cppを持ち、一方が他方を直接含むという規則。また、.cppファイルにヘッダーを含めるようにし、可能であればヘッダーを含むヘッダーを避けるようにしてください。

于 2013-06-26T08:30:32.130 に答える
3

いいえ、通常はありませんmain.h。ヘッダーだけでなく、必要なすべてのヘッダーをソース ファイルに含めることをお勧めします。必要なものをすべて含めるためにヘッダーに依存している場合、ヘッダーの変更によってソース ファイルが破損する可能性があります。

于 2013-06-26T08:30:15.970 に答える
2

1st - main.h が必要ですか?

めったにありません。 main.cppを含む翻訳単位をコンパイルしていることを意味しますmain()。これは通常、 のシンボルについて知る必要がない他の低レベル ライブラリのクライアント コードですmain()。なんらかの理由でデザインが周期的になり、出力したものを別の に分割しない正当な理由 (膨大な時間的プレッシャー?) があった.cpp場合、最終的にmain.h. これは実際には、他の翻訳単位がアクセスする必要があるかもしれない main.cpp のシンボルのみを宣言する必要があります。具体的には、car.h または speed.h 宣言を必要とする main.h 関数を公開しない限り、car.h および/または speed.h を含めないでください。たとえば、型の引数を取る main.cpp 内の関数の宣言などです。 car.h または speed.h から。

2番目 - main.h に #include car.h と #include speed.h がある場合、car/speed.cpp に #main.h を追加するだけで済みます (つまり、car/speed.h が含まれます)。

上記のように、これはほぼ間違いなく非常に壊れた設計です: main.cpp は car.h と speed.h を直接インクルードすることが期待されます。 h と speed.h には、両方へのアクセスを必要とする特定のクライアントにちなんで名付けるのではなく、包括的なテーマ (transport.h など) に基づいて名前を付ける必要があります。main.h は、main.cpp から何かを公開する必要がある場合にのみ存在する必要があることに注意してください。

3番目 - あなたはそのルートに行くべきですか?

上で説明したことを考えると、おそらくそうではありません。

于 2013-06-26T08:40:45.857 に答える
1

「main.h」を持つことは一般的ではありませんが、それを禁止するルールはありません。

何を含める必要があるか、それをどのように達成するかは、それぞれのクラスが何をするか、お互いにどのような知識が必要かによって異なります。

あなたが説明するスタイルで「他のすべてを含む1つのインクルードファイル」を持つことは、一般的に悪い考えと考えられています。いくつかの理由があります: 1. どのソース ファイルがどのインクルードに依存しているかを確認するのが難しい。2. 使用されていない一連のクラス定義をコンパイラが読み取らなければならないため、コンパイル時間が長くなります。3. たとえば、「car.h」と「car.cpp」を簡単に取得して、「speed.h」なしで別のプロジェクトに貼り付けることはできません。

于 2013-06-26T08:34:10.500 に答える
0

コードで使用するソース ファイルのヘッダー ファイルを作成する必要があります。したがって、car.cpp と speed.cpp の両方に、main.cpp で宣言した関数を含めない可能性が高いため、main.h ヘッダーを作成する必要がある可能性はほとんどありません (不可能ではありません)。対照的に、car.cpp と speed.cpp の機能を main.cpp に含める場合は、それらのヘッダーをメインファイルに含めます。

于 2013-06-26T08:30:24.543 に答える