(class_name)
该宏引入了和DECLARE_DYNCREATE引入的四个成员差不多的成员。唯一的区别
是该宏引入的静态成员class##class_name前面没有const修饰符。
8。DECLARE_SERIAL(class_name)
该宏引入了和_DECLARE_DYNCREATE所引入的一样的四个成员,另外它还多了
这么一句:
AFX_API friend CArchive& AFXAPI operator>>(CArchive& ar, class_name* &
pOb);
原来是把重载操作符operator>>的函数当作该类的友元。于是在操作符函数oper
ator>>中就可以访问该类的成员了。
9。IMPLEMENT_SERIAL(class_name, base_class_name, wSchema)
该宏初始化了成员变量:
CRuntimeClass class_name::class##class_name=
{
#class_name,
sizeof(class class_name),
wSchema,
class_name::CreateObject),
RUNTIME_CLASS(base_class_name),
NULL
};//在这里,class##class_name前面是没有const修饰符的。
该宏还实现了下列函数:
CObject* PASCAL class_name::CreateObject()
{
return new class_name;
}
CRuntimeClass* class_name::GetRuntimeClass() const
{
return RUNTIME_CLASS(class_name);
}
CArchive& AFXAPI operator>>
(CArchive& ar, class_name* &pOb)
{
pOb=(class_name*)ar.ReadObject(RUNTIME_CLASS(class_name));
return ar;
}
该宏还声明了一个函数原型:
AFX_CLASSINIT _init_##class_name(RUNTIME_CLASS(class_name));