请问#include "abc.h"和class abc有啥区别?

blijiang 2008-12-11 10:33:53
我看一些工程项目有些是include "abc.h",有些则是class abc;
请问#include "abc.h"和class abc有啥区别?啥时用class abc?
...全文
269 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaohou0701 2008-12-11
  • 打赏
  • 举报
回复
[Quote=引用楼主 blijiang 的帖子:]
我看一些工程项目有些是include "abc.h",有些则是class abc;
请问#include "abc.h"和class abc有啥区别?啥时用class abc?
[/Quote]

呵呵,楼主这个问题,我前几天也有过相似的疑惑.

#include "abc.h"是包含
class abc 是一种前向声明(forward declaration)

当你引入了前向声明时候,在声明之后,定义之前,类是一个不完全类型,引用它的函数的数据成员只能是指向它的指针或者引用.

例如:

class abc
class D{
abc *myabc; //正确的,
abc myabc; //错误的.
}

//一般,前向声明是用于编写互相依赖的类的.

//例如类A里面要用到类B,类B里面又要用到类A的时候使用

//楼主有C++ primer这本书的话,可以看看P374页的详细解说.
zhangjundriver 2008-12-11
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 arong1234 的回复:]
class abc;这种方式用于超前引用,到这里编译器不知道abc的具体实现,只知道有这么个类
#include "abc.h"则引入所有定义,编译器完全知道abc的定义

一般情况用后者,前者在全部引入有冲突时采用,你搜索一下“超前引用”也许可以找到一些讲述这方面内容的文章
[/Quote]
该楼主说得很清楚啊。大概就这个意思。
hlgzhj 2008-12-11
  • 打赏
  • 举报
回复
#include 是预处理命令,当前文件包含相应的.h文件

而class *** 是类的声明
nullah 2008-12-11
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 arong1234 的回复:]
class abc;这种方式用于超前引用,到这里编译器不知道abc的具体实现,只知道有这么个类
#include "abc.h"则引入所有定义,编译器完全知道abc的定义

一般情况用后者,前者在全部引入有冲突时采用,你搜索一下“超前引用”也许可以找到一些讲述这方面内容的文章
[/Quote]

说的很清楚
wiowei 2008-12-11
  • 打赏
  • 举报
回复
一般,同一个.h文件中定义了多个类,而且某个类中涉及另一个类(比如包含另一个类的对象)的话,用个class abc;的声明;其他情况#include .h足够
张赐 2008-12-11
  • 打赏
  • 举报
回复
class abc 就是定义一个类嘛

如果类的申明和类的实现分开定义的话,一般就把类的申明放到.h头文件中定义

然后再要使用类的时候,就要引用这个头文件 include “××.h”,系统才能知道定义了该类
MAlice 2008-12-11
  • 打赏
  • 举报
回复
#include "abc.h"是包含abc的头文件
class abc是一个abc的类名啊
arong1234 2008-12-11
  • 打赏
  • 举报
回复
class abc;这种方式用于超前引用,到这里编译器不知道abc的具体实现,只知道有这么个类
#include "abc.h"则引入所有定义,编译器完全知道abc的定义

一般情况用后者,前者在全部引入有冲突时采用,你搜索一下“超前引用”也许可以找到一些讲述这方面内容的文章
Mougou 2008-12-11
  • 打赏
  • 举报
回复
#include 是预处理指令,包含头文件的。
class 是声明或定义类用的,根本不是一码事,别放在一起说啊
霍大脚 2008-12-11
  • 打赏
  • 举报
回复
一个是头文件,一个是类相差千里啊,class abc;一般是在下面有提前用到类abc的时候提前申明以让编译器知道有这么个类

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧