前方宣言


クラス名を伝える

クラスのメンバとして、他のクラスのオブジェクトを保有したり
また、メンバ関数型のクラスのオブジェクトを受け取る場合があります

これが、相互で行われた場合難しい問題が発生します
一方のクラスがまだ定義されていないということになります
といって、両方のクラスを同時に定義するのは無理な話です
class A {
	void getB(B &);
};

class B {...
これを見ればわかるように、class A の定義の時点で B は定義されていません
そこで、前方宣言(または前方参照)を用いてコンパイラにクラス名を教えます
クラス名を伝えることで、コンパイラはそのクラスを認識できます
ただし、クラスメンバの定義などはその時点で定義されていないので使えません

class class-name;
これを、クラス定義よりも前に記述することで
指定された class-name クラスを宣言したことになります
#include<iostream>
using namespace std;

class Neko;

class Kitty {
public:
	Kitty(Neko &);
};

class Neko {
public:
	char *name;
	Neko(char *name) { Neko::name = name; }
} n_obj("Rena") ;

Kitty::Kitty(Neko &obj) {
	cout << obj.name << '\n';
}

int main() {
	Kitty k_obj(n_obj);
	return 0;
}
Kitty クラスのコンストラクタは Neko オブジェクトを受け取りますが
この時点で Neko クラスが定義されていないので前方宣言が使われています



前のページへ戻る次のページへ