前置声明在类的互包含中用到,还可以减少头文件的包含层次。
像我们这样前置声明类A:
class A;
是一种不完整的声明,只要类B中没有执行需要了解类A的大小或者成员的操作,则这样的不完整声明允许声明指向A的指针和引用。
而
A a;
是需要了解A的大小的,不然是不可能知道如果给类B分配内存大小的,因此不完整的前置声明就不行,必须要包含a.h来获得类A的大小,同时也要重新编译类B。
再回到前面的问题,使用前置声明只允许的声明是指针或引用的一个原因是只要这个声明没有执行需要了解类A的大小或者成员的操作就可以了,所以声明成指针或引用是没有执行需要了解类A的大小或者成员的操作的。
我们使用前置声明的一个好处是,从上面看到,当我们在类A使用类B的前置声明时,我们修改类B时,只需要重新编译类B,而不需要重新编译a.h的(当然,在真正使用类B时,必须包含b.h)。另外一个好处是减小类A的大小
使用注意点:
1、在前置声明时,我们只能使用的就是类的指针和引用(因为引用也是居于指针的实现的),否则编译出错
2、不能在B的声明中使用前置声明类A的方法,否则编译会出现如下错误
使用了未定义的类型A;
A->XX方法的左边必须指向类/结构/联合/泛型类型
3、不能在CBed定义之前调用CBed的析构函数
版权声明:本文为CSDN博主「XQloveLeslie」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/HITXuQin/article/details/12848739