为什么要有前置声明?
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
时间: 2024-10-14 19:26:11