QDemo以前置声明

前置声明 = Forward Declaration

对于一个刚刚接触include写法的童鞋来讲, spa

忽然看到不少人用以下写法:不知甚解否? code

#ifndef DIALOG_H
#define DIALOG_H

#include <QDialog>

//! [前置声明]
QT_BEGIN_NAMESPACE
class QPushButton;
class QLabel;
class QLineEdit;
QT_END_NAMESPACE
//! [前置声明]

class Dialog:public QDialog
{  Q_OBJECT  public:
    Dialog();
    ~Dialog();
};

#endif // DIALOG_H

这里记录下本身对此的探究过程: 继承

首先,在Qt自带的一些例子、内置类库,就能够看到这种写法:

一样的Qt其余例子程序以及其余内置类,你慢慢看都会找到相似的不少“前置声明”写法, it

那么,重点来了: io

前置声明究竟是什么(what)?有什么用(why)?用在哪里(where)?

what:简单来讲,

在Qt里就是以下的一种写法: 编译

//! [前置声明]
QT_BEGIN_NAMESPACE 
class QPushButton; //随便你
class QLabel; //仍是随便你
class QLineEdit; //就是随便你
QT_END_NAMESPACE
//! [前置声明]

why:通俗易懂点说,

  1. 能够避免多个include产生的文件依赖,提升编译速度;
  2. 能够避免重复indude致使的相互引用问题,提升容错;
  3. 以及其余...之后补充
  4. 其实在Qt有点不爽的是,用了前置声明,在new的会看不到自动补全的提示。

where:直接看Qt官方的使用,

Qt里中的控件类QPushButton、QLabel等等都是必定、确定、保证定义好而且可使用的, class

那么咱们就能够直接用前置声明来写,由于这些控件类不须要咱们去操心,确定能用。 引用

而什么状况下不适合用呢? 程序

好比自定义了一个类继承QDialog,那么QDialog最好用不要用前置声明,而建议用include。 im


再次声明:本篇彻底是我的理解方式、错误不免,忘指正。

相关文章
相关标签/搜索