C++_前置声明

时间:2023-03-09 17:32:38
C++_前置声明

为什么要有前置声明?

eg:

  -定义一个类 class A,这个类里面使用了类B的对象b,然后定义了一个类B,里面也包含了一个类A的对象a,就成了这样:

//a.h
#include "b.h"
class A
{
....
private:
    B b;
};
//b.h
#include "a.h"
class B
{
....
private:
    A a;
}; 

一编译,就出现了一个相互包含的问题了,解决的方法是在a.h文件中声明类B,然后使用B的指针。

//a.h
//#include "b.h"
class B;
class A
{
 ....
private:
 B b;
};
//b.h
#include "a.h"
class B
{
 ....
private:
 A a;
};

前置声明的好处:

  -当我们在类A使用类B的前置声明时,我们修改类B时,只需要重新编译类B,而不需要重新编译a.h的

  -当然,在真正使用类B时,必须包含b.h

  -所以,在定义头文件时,能依赖前置声明的就不要依赖定义,同时在适当的情况下应该用类型的前置声明来减少头文件的导入。

eg:

  -在头文件中定义类的一个指针成员时,该指针是工程中另外定义的类型class Account的一种指针Account* m_Account;

  -那么在该头文件的类声明之前加上前置声明 : class Account;

  -就OK了,而不需要将Account所在的头文件包含进来

前置声明的使用条件:

  -假设类XXX在 xxx.h,以下三种情况可以使用前置声明而不用包含xxx.h

  -1.参数或返回类型为XXX的函数声明;

  -2.类型为XXXt的类静态成员;

  -3.类成员变量声明为XXX* 或 XXX&;

  -需要包含xxx.h的几种情况

  -1.你的类中如果有定义类型xxx的非静态成员

  -2.你的类继承了xxx的话

注意:

  -只是大概了解下,还有很多不清楚的地方

  -待续。。。

参考:

  -http://blog.csdn.net/moxiaomomo/article/details/8083199

  -http://qimo601.iteye.com/blog/1406992