0
点赞
收藏
分享

微信扫一扫

mfc大观之一(全局对象)


    一直觉得侯捷的《深入浅出mfc》写的挺好的,但是有一点我自己不太喜欢。那就是,每一次书印刷的时候,他都要把别人写的感谢信放在上面,实在觉得有点臭屁得不行。本身mfc就是一个框架而已,没有mfc用windows sdk也可以写出不错的代码。这方面大家可以看看coolplay、filezilla、notepad++等开源软件,这些软件都没有采用mfc的写法。当然了,对于mfc来说,大家如果写出一个类似的demo,自己也可以理解得更加深刻一些。


    另外就是,mfc中充斥了大量的宏、全局变量、类函数指针、算术符重载等等,这些技巧对于c++语言不是很熟练的同学来说是一个很大的门槛。所以,如果想真的了解和弄懂mfc,深入了解c++才是真正的难点。等你自己了解了c++之后,回头再看mfc的时候,就会发现其实也就是这么一回事。


    闲话不多说,我们今天看看mfc中全局对象是怎么回事。大家如果使用过mfc,就会觉得很奇怪,明明没有看见创建对象的相关代码,这些函数究竟是怎么调用的。原因其实就在全局对象里面。全局对象的创建是在main函数之前调用的,对于应用程序来说,其实在main函数之前,系统就已经做了很多的工作了。下面的示例代码或许可以说明相关问题。


#include <iostream>
using namespace std;

class cobject;
static class cobject* gobj;

class cobject {

public:
cobject() {
cout << "cobject::cobject()" <<endl;
gobj = this;
}

virtual ~cobject() {
cout << "cobject::~cobject()" << endl;
}
virtual void initInstance() {
cout << "cobject::initInstance()" << endl;
}
};

class capp: public cobject{

public:
capp() {
cout << "capp::capp()" << endl;
}

~capp() {
cout << "capp::~capp()" << endl;
}

void initInstance() {
cout << "capp::initInstance()" << endl;
}
};

capp app;

cobject* get_obj() {
return gobj;
}

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

cout << "enter main procedure()" <<endl;
get_obj()->initInstance();
cout << "leave main procedure()" << endl;

return 0;
}



举报

相关推荐

0 条评论