いくつかのコードを更新していますが、ヘッダーで作業しているときに、次の行に出くわしました。
.
.
.
class HereIsMyClass;
.
.
.
それでおしまい。別の長いクラス定義の前にあるのは、1 行だけです。HereIsMyClass は実はどこか別のクラスなのですが、なぜこの行がここに書かれているのかわかりません。それは何をするためのものか?
いくつかのコードを更新していますが、ヘッダーで作業しているときに、次の行に出くわしました。
.
.
.
class HereIsMyClass;
.
.
.
それでおしまい。別の長いクラス定義の前にあるのは、1 行だけです。HereIsMyClass は実はどこか別のクラスなのですが、なぜこの行がここに書かれているのかわかりません。それは何をするためのものか?
C++ のこの行は前方宣言です。将来のある時点で、HereIsMyClass という名前のクラスが存在する可能性が高いと述べています。クラスが完全に定義される前に、宣言でクラスを使用できます。
循環的に依存するクラスの分割とヘッダー ファイルの管理の両方に役立ちます。
例えば
class HereIsMyClass;
class Foo {
void Bar(HereIsMyClass* p1) ...
};
class HereIsMyClass {
void Function(Foo f1);
}
それは「前方宣言」と呼ばれます。これは、'HereIsMyClass' がクラスの名前であることをコンパイラに伝えます (変数、関数、またはその他の名前ではありません)。クラスを使用するには、後で定義する必要があります。
これは、相互に参照する必要があるクラスがある場合に便利です。
ここで、1 つの説明を示します。
これは事前宣言と呼ばれるものです。HereIsMyClass の実際の宣言がファイルのさらに下にある場合、またはファイルのさらに下に含まれる別の #include にある場合、この行の後に HereIsMyClass を使用するクラス定義がある可能性があります。
その行がない場合、ファイルがコンパイルされない可能性があります。