よりリファクタリングしやすいC ++の記述
C ++では、ヘッダーを使用する必要はまったくありません。C#またはJavaの場合と同じように、1つのファイルでオブジェクト全体を定義できます。C開発者は通常、外部呼び出しのみをヘッダーファイルに保持します。すべての内部呼び出しは、.cファイルで定義されます。同様に、C ++ .hファイルをクラス/インターフェース(純粋な仮想抽象クラス)/などのために予約できます。DLLの外部で共有することを目的としています。内部クラス/構造体/インターフェイスなどの場合、必要な.cppファイルを含めるだけです。
#include<myclass.cpp>
これは最も一般的なアプローチではないようですが、合法的なC ++です。それは間違いなくすべての内部コードの可能性です。これにより、内部コードとクラスのセットが大幅に変更され、ライブラリ/実行可能ファイルの外部のコードとやり取りするためのより安定したインターフェイスが提供されます。
1つのファイル内にクラス全体を含めると、必要な処理が簡単になります。メソッドの名前を変更し、そのメソッドが呼び出されるすべての場所を検索しなければならないという問題は解決しませんが、よりわかりやすいエラーメッセージがあることを確認します。ヘッダーでメソッドを一方向に宣言することほど悪いことはありませんが、実装方法は異なります。ヘッダーファイルを呼び出す他のコードは適切にコンパイルされ、リンク例外が発生しますが、実装ファイルはメソッドが定義されていないと文句を言うものになります。(実際のクラス宣言で)所定の場所にすべてのメソッドを定義すると、どのファイルが含まれていても同じエラーメッセージが表示されます。
この質問もご覧ください。C++用の優れたリファクタリングツール
C / C ++がヘッダー/実装ファイルを解決する方法
ベースCレベル(およびC ++はその基盤上に構築されます)では、ヘッダーファイルは、コンパイラーがオブジェクトファイルを作成するのに十分な関数/構造体/変数の約束を宣言します。同様に、C ++ヘッダーファイルは、関数、構造体、クラスなどの約束を宣言します。コンパイラは、スタックなどにスペースを確保するためにこの定義を使用します。
.cまたは.cppファイルには実装があります。コンパイラーは各実装ファイルをオブジェクトファイルに変換するため、未実装の概念(ヘッダーで宣言されたもの)へのフックがあります。リンカは、フックを他のオブジェクトファイルの実装に結び付け、すべてのコード(共有ライブラリまたは実行可能ファイル)を含むより大きなバイナリを作成します。
VS特定
Visual Studioでの作業については、少し簡単にするためのウィザードがいくつかあります。新しいクラスウィザードは、ヘッダーと実装ファイルの一致するペアを作成します。新しいメソッドを宣言できるクラスブラウザ機能もあります。ヘッダーに定義を挿入し、.cppファイルに実装スタブを挿入します。Visual Studioには、これらの機能が10年以上使用されています(使用している限り)。