学习的过程中无意间看到前向声明的用法,在这之前开发项目过程中出现过由于模块太多,不同.h相互包含导致的各种问题,使用前向声明可以一定程度上减少出现由于头文件重复包含的问题,特此记录
详解
前向声明就是提前声明类,但不去定义它,可以使用该类的指针或引用。声明的类是一个不完全类型(有声明没定义,找不到任何成员函数和成员变量),因此在使用上会有限制。
class ForwardDeclare;//前向声明一个类
(1)不能定义ForwardDeclare类的对象。
(2)可以用于定义指向这个类型的指针或引用。(很有价值的东西)
void fun(ForwardDeclare& test, int a) //可以使用引用或指针
(3)用于声明(不是定义)使用该类型作为形参或者返回类型的函数。
好处
- 减少头文件的inlcude,节省编译的时间
- 减少由于两个类之间存在耦合而导致的相互使用冲突
举例
//A.h
class A {
public:
A();
~A();
}
//B.h
class A; //前向声明
class B {
public:
B();
~B();
void fun(A* test, int a); //使用A的指针
}
//错误使用方法
class A;
class B {
public:
B();
~B()
private:
A instance; //无法实例化对象
}