初看QT代码时,会经常看到d这个指针,往往弄不清是什么意思,今天就来理一理,先看示例。
/*这是directfb keyboard里的一段代码,qdirectfbkeyboard.h*/
class QDirectFBKeyboardHandlerPrivate;
class QDirectFBKeyboardHandler : public QWSKeyboardHandler
{
public:
QDirectFBKeyboardHandler(const QString &device);
~QDirectFBKeyboardHandler();
private:
QDirectFBKeyboardHandlerPrivate *d;
};
在定义QDirectFBKeyboardHandler的时候(在.h文件中),只包含有一个类成员变量QDirectFBKeyboardHandlerPrivate *d,然后由这个指针指向一个数据成员对象,这个数据成员对象包含所有这个QDirectFBKeyboardHandler的成员数据,然后在.cpp文件中,定义这个私有数据成员对象。
/*qdirectfbkeyboard.cpp*/
class QDirectFBKeyboardHandlerPrivate : public QObject
{
Q_OBJECT
public:
QDirectFBKeyboardHandlerPrivate(QDirectFBKeyboardHandler *handler);
~QDirectFBKeyboardHandlerPrivate();
void suspend();
void resume();
private:
QDirectFBKeyboardHandler *handler;
IDirectFBEventBuffer *eventBuffer;
QSocketNotifier *keyboardNotifier;
DFBEvent event;
int bytesRead;
int lastUnicode, lastKeycode;
Qt::KeyboardModifiers lastModifiers;
private Q_SLOTS:
void readKeyboardData();
};
如此设计的好处:
1、减少头文件依赖
把具体的数据成员都放到cpp文件中去,在需要修改数据成员的时候,只需要改cpp文件,就可以避免一次因为头文件的修改而导致所有包含了这个文件的文件全部重新编译一次。同时也减少了头文件对其它头文件的依赖性,include一次文件就ok了。
2、增加类的封装
这种方法增强了类的封装性,无法再直接存取类成员变量,而必须写相应的 get/set 成员函数来做完成。
阅读(2726) | 评论(0) | 转发(0) |