天天看點

#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;

QT_END_NAMESPACE

//code end

class QAction;

class QCheckBox;

...

如果沒有 聲明 将會 出現類似下面的錯誤

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

那麼 這個是做什麼用的呢???? 

是因為在頭檔案裡面隻有這些類的指針申明,并沒有真正執行個體化,在這個頭檔案對應的cpp檔案裡面應該會

#include < QDialogButtonBox >

#include < QFile >

... 

在cpp檔案裡面才會正真執行個體化這些類。

其 實直接在頭檔案裡面#include < QDialogButtonBox> #include< QFile>也是可以的,像它這樣做,好像是可以降低各個檔案編譯時的關聯度,不會在改動了一下部分類的時候,引發其他大量檔案的重新編譯,在做小工程的時候沒什麼差別,但是做大了,編譯一次需要好幾個小時的時候,這樣做的優勢就顯現出來了

class   類名隻是聲明存在這麼一個類,但是通過這個聲明無法得到任何關于此類的具體資訊。這樣你可以在其他使用到的地方聲明一個該類型的指針。 

include頭檔案則是将整個該頭檔案與使用到的地方關聯起來。 

使用class   類名一般是為了去除編譯依賴,減少編譯消耗的時

#include "xx.h" 在編譯的時候把xx.h檔案直接展開,是以裡面的接口都能用,可以申明對象。但是class xx;這種方式就不會,你隻能使用它的指針或者引用,你不能建立申明對象。

繼續閱讀