私がプロジェクトを持っている場合
main .cpp
Knife .h and .cpp
Cucumber .h and .cpp
キュウリでナイフのメンバーを使用したいのですが、次のものを使用するかどうかは重要です。
#include "Knife.h"
#include <iostream>
using namespace std;
Cucumber.hまたはCucumber.cpp(Cucumber.cppにはすでにCucumber.hのインクルードがあると想定)?
私がプロジェクトを持っている場合
main .cpp
Knife .h and .cpp
Cucumber .h and .cpp
キュウリでナイフのメンバーを使用したいのですが、次のものを使用するかどうかは重要です。
#include "Knife.h"
#include <iostream>
using namespace std;
Cucumber.hまたはCucumber.cpp(Cucumber.cppにはすでにCucumber.hのインクルードがあると想定)?
ヘッダーファイルに含まれるファイルの数を最小限に抑えることをお勧めします。したがって、選択肢があれば、ソースファイルに含めることをお勧めします。
ヘッダーファイルを変更する場合は、このヘッダーファイルを含むすべてのファイルを再コンパイルする必要があります。
したがって、cucumber.hincludes knife.h、main.cppincludes cucumber.h、およびを変更した場合knife.h、すべてのファイルが再コンパイルされます(、、cucumber.cppおよびknife.cpp)main.cpp。
includeとcucumber.cppincludesの場合、を変更すると、とのみが再コンパイルされるため、コンパイル時間が短縮されます。knife.hmain.cppcucumber.hknife.hcucumber.cppknife.cpp
きゅうりにナイフを使用する必要がある場合は、次のように進めることができます。
// Cucumber.hpp
#ifndef CUCUMBER_HPP
#define CUCUMBER_HPP
class Knife;
class Cucumber
{
public :
///...
private :
Knife* myKnife
}
#endif
//Cucumber.cpp
#include "Cucumber.hpp"
#include "Knife.hpp
// .. your code here
この「トリック」は「前方宣言」と呼ばれます。これは、コンパイル時間を最小限に抑えたいC++開発者のよく知られたトリックです。
はい、ファイルに入れる必要があり.cppます。
ビルドが速くなり、依存関係が少なくなり、アーティファクトとノイズが少なくなります。iostreamの場合、GCCは次のように宣言します。
// For construction of filebuffers for cout, cin, cerr, clog et. al.
static ios_base::Init __ioinit;
名前空間内std。Knife.hその宣言は、多くのファイルに含まれている場合、起動時に構築する必要がある大量の(冗長な)静的データを生成します。したがって、多くのメリットがありますが、唯一の欠点は、実際に必要なファイルを明示的に含める必要があることです。つまり、必要なすべての場所にファイルを含める必要があります(これはいくつかの点で非常に良いことでもあります)。
私が提唱しているアドバイスは、特定のソースファイルに必要な最小限のファイルのみを含め、できるだけ多くのインクルードをヘッダーから除外することでした。コンパイル時に依存関係が減少する可能性があります。
注意すべきもう1つのことは、名前空間の使用法です。あなたは間違いなくそのようなものをヘッダーに入れることに注意したいです。計画していないファイルの名前空間の使用法が変更される可能性があります。
原則として、次の理由により、ヘッダーではなくインクルードを実装ファイルに追加してみてください。
ポインタでクラスを参照する場合、またはヘッダーのみを参照する場合は、適切なヘッダーを含める必要はありません。クラス宣言で十分です。
おそらく他にもかなりの理由があります-上記はおそらく最も重要で明白な理由です。