C++|类的前置声明用法

C++ 前置声明

问题
两个类A、B相互调用,在两个类A和B的头文件中 #include 了所需的头文件,编译报错。
为什么呢,A需要B,B需要A,形成了循环,违反了程序的确定性原则。

原因在于:class BBB;这种方式仅仅是一种符号声明,告诉编译器存在BBB这个类,不会去确定BBB这个类的所占资源(内存)大小和这个类的实现。

解决
在AAA.h中定义的是BBB的指针变量或引用变量,而不是普通的BBB变量,这是因为定义指针变量或引用变量,编译器只需给该变量分配4字节(32位程序)内存,而不用管BBB对象具体需要占用多少内存,也不去确定该类的构造函数是如何实现的,这些事情是在创建该对象(即AAA.cpp中:b = new BBB;)时才会去确定;

但是若定义普通的BBB变量:BBB b; 的话,编译器需要知道b变量占用了多大内存,构造函数如何实现,然后计算需要为AAA类分配内存大小,这样只是声明Class BBB;就不行了,否则会报错:“使用了未定义的类BBB”,解决办法是#include"BBB.h”,又回到了开始的问题。

同理,BBB.h中关于AAA的声明及变量定义也是如此。

优点

使用前置变量,即:在头文件中声明该类,在实现文件中包含该类。有其一定的优势,以AAA类为例:

    已标记关键词 清除标记
    相关推荐
    ©️2020 CSDN 皮肤主题: 技术黑板 设计师:CSDN官方博客 返回首页
    实付 9.90元
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

    余额充值