私がコードを持っている場合main.cpp
、定義されたクラスが必要であると言って、必要なすべてのライブラリ/ヘッダーをファイルmyheader.h
に含めるのは悪い習慣ですか?main.cpp
myheader.h
もしそうなら、なぜですか?main.cpp
それがどうしようもないことを考えるとmyheader.h
。
この質問が少し単純な場合は申し訳ありません-複数のファイルを分離する一般的な方法がわかりません。
一般に、現在のファイルに必要なものだけを含める必要があります。OK、とにかくmain.cpp
使用するので、必要なヘッダーを含めたり、他のヘッダーをmyheader.h
含めたりしないのはなぜですか? 明日は、不要なヘッダーやに含まれる他のヘッダーを含める必要があるため、冗長でコンパイル時間が長くなります。したがって、 に必要なものはすべてに含めます。<iostream>
myheader.h
main.cpp
myheader.h
myOthercpp.cpp
<iostream>
myheader.h
main.cpp
main.cpp
このパターンには、プリコンパイル済みヘッダーと呼ばれる例外があります。
例外はありますが、通常、ヘッダー内にヘッダーを含めないことをお勧めします。
たとえば、大きなライブラリbiglibrary.cpp/biglibrary.hがある場合
大きなライブラリに依存して作業を行うクラスmyclass.h/myclass.cpp
そして、MyClassに依存するいくつかのコード--main.cpp
main.cppはbiglibraryに依存しません。それについて何も知る必要はありません。myclass.hにのみ依存します。myclass.hにbiglibrary.hが含まれている場合、main.cppをコンパイルするよりもbiglibrary.hを解析する必要があり、コンパイルが遅くなります。
もう1つの問題は、循環依存です。2つのクラスA、Bがあるとします。AはBを参照し、BはAを参照します。
ahをbhに含めますか、それともbhをahに含めますか
よりクリーンな解決策は、必要なヘッダーをソースファイルに含めることです。
ヘッダー内のコードが存在しないクラスへの参照を必要とする場合は、次のように前方減速を使用します: http: //www.eventhelix.com/realtimemantra/headerfileincludepatterns.htm