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


再次聲明:本篇徹底是我的理解方式、錯誤不免,忘指正。

相關文章
相關標籤/搜索