简述
如果有一个类A需要把其他类的对象声明为对象成员,它就需要包含其他类的头文件。如果类A包含的其他类的头文件过多,就会影响编译速度。
C++为此提供了专门的机制–前置声明法来解决这个问题。
使用前置声明法的要点有:
1. 把需要引进的类的头文件包含在本类的.cpp文件中
2. 在本类的.h文件中 用“class + 类名”的形式进行前置声明。类名为需要引进的类的名字。
3. 需要引进的类在头文件中用指针的形式声明其对象。
类文件
下面贴一段代码:CDlgMain是主窗口类,它需要把CDlgSysSet类和CDlgPersonalCenter类声明为自己的对象成员。方法如下所示
DlgMain.h 文件
#pragma once
#include "stdafx.h"
class CDlgSysSet; //系统设置窗口
class CDlgPersonalCenter; //个人中心窗口
//主页窗口
class CDlgMain
{
public:
CDlgMain();
~CDlgMain();
protected:
CDlgSysSet* m_pDlgSysSet;
CDlgFirstPage* m_pDlgFirstPage;
};
DlgMain.cpp 文件
#include "DlgMain.h"
#include "DlgSysSet.h"
#include "DlgPersonalCenter.h"
CDlgMain::CDlgMain()
{
}
CDlgMain::~CDlgMain()
{
}
Qt中的ui文件
Qt中,把ui文件包含在.cpp文件中,在.h文件中使用ui类的指针形式,可以避免该头文件被其他文件包含时,ui文件被包含在内,从而优化编译速度。
实现方式如下:
// QtGuiClass.h 文件
#pragma once
#include <QWidget>
// 此处对界面类的前置声明
namespace Ui { class QtGuiClass; };
class QtGuiClass : public QWidget
{
Q_OBJECT
public:
QtGuiClass(QWidget *parent = Q_NULLPTR);
~QtGuiClass();
private:
// 此处使用指针形式
Ui::QtGuiClass *ui;
};
// QtGuiClass.cpp 文件
#include "QtGuiClass.h"
#include "ui_QtGuiClass.h"
QtGuiClass::QtGuiClass(QWidget *parent)
: QWidget(parent)
{
ui = new Ui::QtGuiClass();
ui->setupUi(this);
}
QtGuiClass::~QtGuiClass()
{
delete ui;
}