前向引用声明
类组合时可能会出现一种特殊情况,就是类A中有类B类型的内嵌对象,而类B中也有类A类型的内嵌对象,即两个类相互包含。这时就要用到前向引用声明了。
前向引用声明是在引用没有定义的类之前对该类进行声明,这只是为程序声明一个代表该类的标识符,类的具体定义可以在程序的其他地方,简单说,就是声明下这个标识符是个类,它的定义你可以在别的地方找到。
一、使用前向应用时,只能使用被声明的符号,不能涉及类的任何细节(因为此时无法定义类的数据成员)。
例如:
class A;
class B
{
A a;//此处错误,没有完整定义A,那么就不能定义完整的对象
};
class A
{
B b;//正确
};
二、但是可以在给出完整的类的定义前,可以定义类的引用和指针
例如:
class A;
class B
{
A&a;//正确,前向应用声明了类A,可以使用类对象的引用了
A*c;//正确,前向应用声明了类A,可以使用类对象的指针了
};
三、还可以声明形参为类A对象值的函数成员,此函数成员的定义必须放在类A的定义之后。
class A;
//前向引用声明
class B
{
public:
void g(A a);//只能声明,定义部分必须放在类A的定义之后。
};
class A
{
public:
void f(B b){}
};
void B::g(A a){}