在Qt開發項目中,經常會用到各種庫,但是一般在.h文件中進行某類型變量定義時,都會對其類型的class進行聲明,如下面代碼所示:
#ifndef WIDGET_H #define WIDGET_H #include <QWidget> #include <QtNetwork> class QTcpSocket; // 前置聲明 namespace Ui { class Widget; } class Widget : public QWidget { Q_OBJECT public: explicit Widget(QWidget *parent = 0); ~Widget(); private slots: void on_pushButton_clicked(); void newConnection(); void readMessage(); void sendMessage(); void displayError(QAbstractSocket::SocketError);
private: Ui::Widget *ui; QTcpSocket * tcpSocket; QString message; quint16 blockSize; };
#endif // WIDGET_H
這是widget.h里面的代碼,在里面用到了QTcpSocket類型,並對其class進行前置聲明。
其主要作用:告訴編譯器用到的這些類已經存在,並且不需要知道這些類的完整定義。
原因:在.h文件中主要是簡單地定義了指向這些類的對象的指針,而並沒有涉及到該類的其他方面。
好處:避免了頭文件被其他文件多次包含,提高了編譯速度。
編程原則:如果頭文件中一些聲明不需要包含其頭文件時,盡量在頭文件中使用類前置聲明。盡量不要在頭文件中包含另外的頭文件。