C++前置聲明的一個好處與用法

在C++ GUI Qt編程中有下面的一個頭文件:編程

#ifndef FINDDIALOG_H
#define FINDDIALOG_H

#include <QDialog>

class QCheckBox;//爲何要進行前置聲明?
class QLabel;
class QLineEdit;
class QPushButton;

class FindDialog : public QDialog
{
//...................其餘什麼的
private:
    QLabel *label;
    QLineEdit *lineEdit;
    QCheckBox *caseCheckBox;
    QCheckBox *backwardCheckBox;
    QPushButton *findButton;
    QPushButton *closeButton;
};

#endif

後面書的解釋是這樣的:指針

前置聲明會告訴這個類的存在,而不用提供類定義的全部細節,他們一般放在它本身的頭文件中,下面FindDialog類中使用的都是這幾個類的指針,並且沒有必要再頭文件中使用他們,由於編譯就無需這些類的完整定義,咱們沒有使用這些的頭文件,如<QCheckBox>,<QLabel>等,而是使用前置聲明,能夠使編譯過程更快一些code

解釋的已經很清楚了,我回憶了一下我之前寫過的代碼,確實出現過這樣的狀況,
遞歸

在A.h中這樣寫的it

#include "B.h"
class A
{
	//.........其餘什麼
private:
	class * B;
};

B.h中這樣寫編譯

#include "A.h"
class B
{
	//.........其餘什麼
private:
	class * A;
};

而後再cpp中使用任何一個類都出現問題,致使的遞歸引用,從這能夠推測其餘相似的狀況.class

我曾經的一個實際的狀況是子對話框有父窗口的指針,父窗口還有子窗口的指針,就由於包含頭文件的問題出現錯誤,我最後解決的方法是指針所有換成兩個窗口類的父類的指針類型CDialog *類型,這樣就不重複包含頭文件了,這個前置聲明也是一個解決辦法,比個人那個更好,這個地方要注意引用

相關文章
相關標籤/搜索