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 *类型,这样就不重复包含头文件了,这个前置声明也是一个解决办法,比个人那个更好,这个地方要注意引用

相关文章
相关标签/搜索