/* 类前向声明.cpp */
/*
使用前向引用声明虽然可以解决一些问题，但它并不是万能的。需要注意的是，
尽管使用了前向引用声明，但是在提供一个完整的类声明之前，不能声明该类的对象，
也不能在内联成员函数中使用该类的对象。请看下面的程序段：
*/

//第一种
#include <iostream>
class Fred; //前向引用声明
class Barney {
  Fred x; //错误：类Fred的声明尚不完善
};
class Fred {
  Barney y;
};

//第二种
class Fred; //前向引用声明

class Barney {
public:
  void method() {
    x->yabbaDabbaDo(); //错误：Fred类的对象在定义之前被使用
  }

private:
  Fred *x; //正确，经过前向引用声明，可以声明Fred类的对象指针
};

class Fred {
public:
  void yabbaDabbaDo();

private:
  Barney *y;
};

/*
总结：当使用前向引用声明时，只能使用被声明的符号，而不能涉及类的任何细节。
*/