class B; 只是告诉编译器B是一个类,B的具体情况是什么则不告诉你(嘻嘻).
#include "CB.h"则把B的全部都给了你(恭喜了)
所以后者更强力.前者的编译效率更高,在编译期间不管对自己无用的垃圾.把相关的东西推迟到LINK阶段做.
当在A中声明一个B的成员变量或者仅使用B做为A中某个成员函数的参数或者仅仅做为成员函数返回值类型时,在前面使用class B;即可,杀鸡不用宰牛刀.
如
class A
{
B m_one;
void Func(B*);
B* GetIt();
...
};
注意,如果你有任何展示B内部情况的任何代码,都需要使用#include "CB.h"来提升以适应编译需求,比如在头文件中实现某个成员函数时使用了B的成员函数或者成员变量...
当A由B继承时必须使用#include "CB.h", 因为A在编译时就要明确知道B的细节,比如要知道B的成员
如:
class A : public B
{
...
};
------------------------------------------------------------------------------------------------
如果你在A里要包含B(包含B是啥子意思?),但是在B里却要使用A的某些信息,比如定义A类的变量,这个时候就要在B里说明 class A 了,是“说明”,不是“定义”!一定要清楚定义和说明的差别。
//CA.h
include "b.h"
class a{
...
}
//CB.h
class a;
class b{
a var_a;
...
}
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/sanfengshou/archive/2009/10/10/4651302.aspx