WEB开发网
开发学院软件开发VC MFC教程(3)-- CObject类 阅读

MFC教程(3)-- CObject类

 2010-03-25 20:33:52 来源:WEB开发网   
核心提示:使用运行时类信息:CPerson a;ASSERT( a.IsKindOf( RUNTIME_CLASS( CPerson ) ) );ASSERT( a.IsKindOf( RUNTIME_CLASS( CObject ) ) );动态创建:CRuntimeClass* pRuntimeClass = RUNTIME

使用运行时类信息:

CPerson a;

ASSERT( a.IsKindOf( RUNTIME_CLASS( CPerson ) ) );

ASSERT( a.IsKindOf( RUNTIME_CLASS( CObject ) ) );

动态创建:

CRuntimeClass* pRuntimeClass = RUNTIME_CLASS(CPerson)

//Cperson有一个缺省构造函数

CObject* pObject = pRuntimeClass->CreateObject();

Assert( pObject->IsKindOf(RUNTIME_CLASS(CPerson));

实现CObject特性的机制

由上,清楚了CObject的结构,也清楚了从CObject派生新类时程序员使用CObject特性的方法。现在来考察这些方法如何利用CObjet的结构,CObject结构如何支持这些方法。

首先,要揭示DECLARE_DYNAMIC等宏的内容,然后,分析这些宏的作用。

DECLARE_DYNAMIC等宏的定义

MFC提供了DECLARE_DYNAMIC、DECLARE_DYNCREATE、DECLARE_SERIAL声明宏的两种定义,分别用于静态链接到MFC DLL和动态链接到MFC DLL。对应的实现宏IMPLEMNET_XXXX也有两种定义,但是,这里实现宏就不列举了。

MFC对这些宏的定义如下:

#ifdef _AFXDLL //动态链接到MFC DLL

#define DECLARE_DYNAMIC(class_name)

protected:

static CRuntimeClass* PASCAL _GetBaseClass();

public:

static const AFX_DATA CRuntimeClass class##class_name;

virtual CRuntimeClass* GetRuntimeClass() const;

#define _DECLARE_DYNAMIC(class_name)

protected:

static CRuntimeClass* PASCAL _GetBaseClass();

public:

static AFX_DATA CRuntimeClass class##class_name;

virtual CRuntimeClass* GetRuntimeClass() const;

#else

#define DECLARE_DYNAMIC(class_name)

public:

static const AFX_DATA CRuntimeClass class##class_name;

virtual CRuntimeClass* GetRuntimeClass() const;

#define _DECLARE_DYNAMIC(class_name)

public:

static AFX_DATA CRuntimeClass class##class_name;

virtual CRuntimeClass* GetRuntimeClass() const;

#endif

// not serializable, but dynamically constructable

#define DECLARE_DYNCREATE(class_name)

DECLARE_DYNAMIC(class_name)

static CObject* PASCAL CreateObject();

#define DECLARE_SERIAL(class_name)

_DECLARE_DYNCREATE(class_name)

friend CArchive& AFXAPI operator>>(CArchive& ar, class_name* &pOb);

上一页  1 2 3 4 5 6 7 8 9  下一页

Tags:MFC 教程 CObject

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接