LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 861|回复: 2

C++中#include "A.h"和class A;的区别

[复制链接]
发表于 2006-2-11 05:33:12 | 显示全部楼层 |阅读模式
以前要用的class我都#include,最近看别人的源码时有时只用到class A; 如

  1. // thread.h
  2. #include "一些文件"
  3. [color="Blue"]class AddrSpace;[/color]

  4. class thread{
  5. '''
  6. }
复制代码




  1. // thread.h
  2. #include "一些文件"
  3. [color="Blue"]#include "addrspace.h"[/color]

  4. class thread{
  5. '''
  6. }
复制代码


有什么区别? 谢谢。
发表于 2006-2-11 09:10:08 | 显示全部楼层
编译技巧, 可以减少编译时间。 在cpp里会include "addrspace.h"的。
回复 支持 反对

使用道具 举报

发表于 2006-2-11 09:47:25 | 显示全部楼层
当头文件中定义的类与函数只用到某个类(如class AddrSpace)的指针时,编译器无须知道其具体的结构,所以只需要用“class AddrSpace;”声明一下其的存在即可。
  1. class AddrSpace;
  2. class thread{
  3. ...
  4.   AddrSpace * as;
  5. ....
  6. }
复制代码

但当要用这个类的具体变量(无论在一个新的类的定义中,还是在其成员函数的实现中),引用其的成员函数时,编译器需要知道其具体的结构,需要include相应的头文件。

  1. #include "addrspace.h"
  2. class thread{
  3. ...
  4.   AddrSpace as;
  5. ....
  6. }
复制代码
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表