码迷,mamicode.com
首页 > 编程语言 > 详细

C++_前置声明

时间:2015-11-08 20:54:56      阅读:215      评论:0      收藏:0      [点我收藏+]

标签:

为什么要有前置声明?

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

C++_前置声明

标签:

原文地址:http://www.cnblogs.com/Neo-Lc/p/4948008.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!