Style(3):前置声明
什么是前置声明
在a.hpp中定义了一个类class test_a_t
// a.hpp
class test_a_t{
public:
void funa();
void funb();
}
在b.hpp单元中我们需要使用 test_a_t类,本来的写法是这样的
//b.hpp
#include <a.hpp>
class test_b_t{
test_a_t* test_a;
public:
test_a_t();
}
//使用前置声明的方法
//b.hpp
class test_a_t;
class test_b_t{
test_a_t* test_a;
test_b_t();
}
//b.cpp
#include <a.hpp>
test_b_t::test_b_t{
//实现过程省略...
}
好处
节约编译时间,那么是如何节约时间的呢?
- 降低模块的耦合。因为隐藏了类的实现,被隐藏的类相当于原类不可见,对隐藏的类进行修改,不需要重新编译原类。
- 降低编译依赖,提高编译速度。指针的大小为(32位)或8(64位),x.h发生变化,指针大小却不会改变,文件c.h(包含x.h)也不需要重编译。
- 接口与实现分离,提高接口的稳定性。
坏处
- 前置声明必须使用指针或引用
- 声明中不能调用,声明对象的方法
解决那些问题
- 两个类的相互依赖可以使用前置声明解决这个问题