本文共 1269 字,大约阅读时间需要 4 分钟。
如果有一个类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文件包含在.cpp文件中,在.h文件中使用ui类的指针形式,可以避免该头文件被其他文件包含时,ui文件被包含在内,从而优化编译速度。
实现方式如下:// QtGuiClass.h 文件#pragma once#include// 此处对界面类的前置声明namespace Ui { class QtGuiClass; };class QtGuiClass : public QWidget{ Q_OBJECTpublic: 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;}
转载地址:http://jnxxn.baihongyu.com/