类前置声明的使用

      在书写C++代码的过程当中,人们有时会用到一个叫类前置声明的东西。那么使用这个类前置声明对于程序员来讲有什么好处呢,我们什么时候可以利用这个类前置声明呢?下面就用一个具体的例子来解释类前置声明的用法。

      假设我们在一个叫OtherClass.h的文件中定义了一些类,其代码如下所示:

      现在我们新写叫CTest的类,与上面两个类形成组合/聚合关系,即我们新写的类中含有上面这些类的指针/引用。其头文件Test.h如下所示:

      注意到上面的头文件中没有包含OtherClass.h这个头文件,而是作了一个类的前置声明。其对应的源文件Test.cpp如下所示:

      这样一来,我们CTest类的实现就完成了。下面我们在其他的文件中调用这个CTest类,这里以main函数调用为例,代码如下所示:

      我们可以发现,在使用CTest这个类的时候,我们只包含了Test.h这个头文件,而没有包含OtherClass.h这个头文件,前置声明的好处就在这里体现了。在编程规范中,在一个头文件中包含另一个大的头文件着实不是一种良好的风格,尤其对于比较大的工程项目更是如此,而使用前置声明便很好的避免了这种情况。

      不过注意,前置声明的类,一般用在新写的类的私有方法或属性里,且必须为指针引用类型;如果是用在公有方法或属性,其他的文件在调用这个类时,还是要包含相关的头文件。

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
在 C++ 中,可以使用声明前置(forward declaration)来解决互相依赖的之间的编译问题。声明前置可以让编译器知道某个的存在,而无需包含该的头文件。 具体来说,如果一个 A 依赖于另一个 B,而 B 又依赖于 A,那么在定义这两个时,就会产生循环依赖的问题。此时,我们可以使用声明前置来解决这个问题。 例如,假设有两个 `ClassA` 和 `ClassB`,它们互相依赖,可以这样来声明前置: ```cpp // ClassA.h 文件 #pragma once // 前置声明 ClassB class ClassB; class ClassA { public: void func(ClassB* b); }; // ClassB.h 文件 #pragma once // 前置声明 ClassA class ClassA; class ClassB { public: void func(ClassA* a); }; ``` 在上面的代码中,我们使用了 `class ClassB;` 和 `class ClassA;` 来声明前置,而不是包含的头文件。这样,编译器就能够知道这两个的存在,从而解决了循环依赖的问题。 需要注意的是,如果使用声明前置,那么只能在函数参数、函数返回值或者指针成员变量等地方使用这个。如果需要使用的具体实现,还需要包含该的头文件。例如,在 `ClassA.cpp` 文件中实现 `ClassA` 的成员函数时,需要包含 `ClassB.h` 头文件: ```cpp // ClassA.cpp 文件 #include "ClassA.h" #include "ClassB.h" void ClassA::func(ClassB* b) { // 使用 ClassB 的具体实现 } ``` 总之,声明前置可以解决互相依赖的之间的编译问题,提高代码的可读性和可维护性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

理想主义帕鲁

感恩有你,日久弥新。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值