0
点赞
收藏
分享

微信扫一扫

mfc大观之二(类识别)


    在mfc中,判断父类和子类是否存在继承关系是通过静态变量来完成的。举个例子来说,所有子类到父类之间是通过一条链表串联在一起的。如果子类可以通过链表访问到父类的指针,那么我们说两者之间存在继承关系,否则没有继承关系。


    那么,既然父类和子类是通过链表串在一起的,那么这是怎么实现的呢?关键就在静态变量。我们知道,类的静态变量是被所有类共享的,因此掌握了静态变量,就可以将父类和子类串在一起了。下面有一段示例代码,大家可以了解一下。


#include <iostream>
using namespace std;

struct runclass {
char name[64];
struct runclass* next;
};

#define CREATE_RUNCLASS(basic) \
static runclass run_##basic; \
static runclass* get_run_class() {return &run_##basic;}

class cobject{

public:
CREATE_RUNCLASS(cobject)

public:
cobject() {}
virtual ~cobject() {}

};

runclass cobject::run_cobject = {"cobject", NULL};


#define IMPLEMENT_RUN_CLASS(basic, origin) \
runclass basic::run_##basic = {#basic, &origin::run_##origin}

class ctemplate : public cobject {

public:
ctemplate() {}
~ctemplate() {}

CREATE_RUNCLASS(ctemplate)
};

IMPLEMENT_RUN_CLASS(ctemplate, cobject);

bool
isKindOf(runclass* basic, runclass* origin){
if(NULL == basic || NULL == origin)
return false;

while(basic->next)
basic = basic->next;

return 0 == strcmp(basic->name, origin->name) ? true :false;
}

int
main(int argc, char* argv[]){

cout << cobject::get_run_class() << endl;
cout << ctemplate::get_run_class() << endl;
return 0;
}



举报

相关推荐

0 条评论