在头文件中#include 类头文件和Class + 类名区别


在写头文件的时候,经常会有一些 class QFile 等这类,看似是声明的东西。例如下面:

#ifndef WINDOW_H

#define WINDOW_H

QT_BEGIN_NAMESPACE

class QTcpServer;

class QTcpSocket;

class QProgressBar;

class QLabel;

class QDialogButtonBox

class QFile

...


如果没有 声明 将会 出现类似下面的错误

ISO C++ forbids declaration of 'QFile' with no type


那么 这个是做什么用的呢?

是因为在头文件里面只有这些类的指针申明,并没有真正实例化,在这个头文件对应的cpp文件里面应该会

#include < QDialogButtonBox >

#include < QFile >

... 


在cpp文件里面才会正真实例化这些类:

其实直接在头文件里面#include < QDialogButtonBox> #include< QFile>也是可以的,像它这样做,好像是可以降低各个文件编译时的关联度,不会在改动了一下部分类的时候,引发其他大量文件的重新编译,在做小工程的时候没什么区别,但是做大了,编译一次需要好几个小时的时候,这样做的优势就显现出来了。


class + 类名只是声明,存在这么一个类,但是通过这个声明无法得到任何关于此类的具体信息。这样你可以在其他使用到的地方声明一个该类型的指针。 


include头文件则是将整个该头文件与使用到的地方关联起来。 

使用class + 类名一般是为了去除编译依赖,减少编译消耗的时间


#include "abc.h" 在编译的时候把xx.h文件直接展开,所以里面的接口都能用,可以申明对象。但是class abc;这种方式就不会,你只能使用它的指针或者引用,你不能创建申明对象。


上一篇 下一篇