简单的说:如果C继承于B,B继承于A,现在假设A、B还未注册,当注册C时,通过递归也能把B、A注册上。
int GetObjectType(void)
{
static int type = 0;
if( type==0 )
{
static ClassInfo classinfo =
{
"OBJECT", /*对象名,唯一*/
sizeof(CObject),
sizeof(CObjectClass),
(pInitObjectCallback)InitObject,
(pInitClassCallback)InitObjectClass,
};
type = RegisterClassType(&classinfo, TOP_OBJECT_TYPE);
}
return type;
}
我们再来看一看InitObject和InitObjectClass,
static void InitObjectClass(CObjectClass *vclass)
{
if(vclass==NULL)
return;
vclass->destory = DestoryObject;/*对虚函数赋值*/
}
static void InitObject(CObject *object)
{
if(object==NULL)
return;
object->ref_counter = 1;
}
这两个函数在GetObjectType()被传进去,那么又是在哪儿被调用的呢?
让我们看RegisterClassType()
int RegisterClassType(ClassInfo *classinfo, int parent_type)
{
int type = 0;
ClassDesc *current, *parent;
parent = (ClassType *)parent_type;
责任编辑:cyth