首页 VC编程-MFC下全局变量和全局函数的定义和调用

VC编程-MFC下全局变量和全局函数的定义和调用

举报
开通vip

VC编程-MFC下全局变量和全局函数的定义和调用 www.vfx110.com收集整理 www.vfx110.com收集整理 用MFC制作的工程由很多文件构成,它不能象一般 C++程序那样随意在类外定义全局变量, 在这里要想定义能被工程内多个文件共享的全局变量和函数必须用一些特殊方法才行。实际 上有多种方法可以实现,这里只介绍两种方法。 一、在应用程序类中定义 用MFC生成的工程中都有一个名为 CxxxApp的类,它派生于 CWinApp类。这个类主要进 行程序的初始化,生成文档、视图对象等工作。我们可以把需要全局访问的变量和函数定义 为这个类的成员变量和成...

VC编程-MFC下全局变量和全局函数的定义和调用
www.vfx110.com收集整理 www.vfx110.com收集整理 用MFC制作的工程由很多文件构成,它不能象一般 C++程序那样随意在类外定义全局变量, 在这里要想定义能被工程内多个文件共享的全局变量和函数必须用一些特殊 方法 快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载 才行。实际 上有多种方法可以实现,这里只介绍两种方法。 一、在应用程序类中定义 用MFC生成的工程中都有一个名为 CxxxApp的类,它派生于 CWinApp类。这个类主要进 行程序的初始化,生成文档、视图对象等工作。我们可以把需要全局访问的变量和函数定义 为这个类的成员变量和成员函数,就可以实现全局访问了。 从严格意义上讲,这种变量和函数并不是全局的,因为它仍然只是类中的成员,只是由于我 们很容易获得 CxxxApp类的指针,所以我们可以在文档、视图、对话框以及各种自定义类 中访问到它们,达到与全局变量类似的效果。访问时用函数“AfxGetApp()”获得 CxxxApp类 的指针,用“AfxGetApp()->成员”访问变量或函数。 例:Test.h:(应用程序类头文件) class CTestApp : public CWinApp { public: int x; //全局变量 int f(int y); //全局函数 ………… }; Test.cpp:(应用程序类程序文件) int CTestApp::f(int y) //全局函数定义 { y++; return y; } 定义在 CTestApp类中的变量和函数可以在其它类中被访问。比如在视图的某函数中要访问 变量 x和函数 f(): void CTestView::xyz() { CTestApp *app = (CTestApp *)AfxGetApp(); //生成指向应用程序类的指针 app->x = 0; //访问变量 x int z = app->f(1); //访问函数 f() ………… } 这样,变量 x和函数 f()可以视作为全局的。 用这种方法实现的全局变量和全局函数虽比较简单,但也有缺点,一是访问不太方便,每次 都需要获取应用程序类的指针;再就是把一些与应用程序类本身无关的变量和函数放在里 面,使这个类看上去怪怪的,破坏了类的封装。 二、用静态变量和静态函数实现 API函数的那种调用方法,不论在哪个类中只要用“::API函数”就可以调用了。合理利用静 态类型(static)可以实现与此相似的全局变量和全局函数。 静态变量和静态函数有如下性质: 若在一个类中用关键字 static 声明 无利益冲突声明中华医学会杂志社职业健康检查不够规范教育部留学服务中心亲友住房声明 数据成员,则这个数据成员就只存在一个拷贝,无论该类 创建了多少个实例,它始终只存在一个,即使该类的实例一个也没创建,它也存在。 若在一个类中用关键字 static声明函数,该函数可以用“类名::函数名”方式访问,无需引用该 类的实例,甚至这个类的实例可以不存在。 www.vfx110.com收集整理 www.vfx110.com收集整理 利用这个性质实现的全局变量和函数使用起来很方便。 值得注意的是,全局变量和全局函数最好集中封装,不要在文档、视图等类内部定义,这样 用起来才有全局的感觉。 例:1、添加一个没有基类的新类,设类名起为 CPublic,姑且称之为公用类 单击“Insert”菜单下的“New Class”命令,选择“Class type”为“Generic Class”,在“Name”栏中 填入类名“CPublic”,单击“OK”,则新类建立完毕。 2、包含公用类的头文件,使各个类都能访问它 CPublic的头文件应包含在应用程序类的头文件中,这样在其它类中引用 CPublic类时就不 需要再包含了。 Test.h:(应用程序类头文件) #include "Public.h" //包含公用类头文件 class CTestApp : public CWinApp { ………… }; 3、在公用类中定义全局变量和全局函数,均使用 static修饰,静态变量还必须在类外定义 和初始化 Public.h:(公用类头文件) class CPublic { public: CPublic(); virtual ~CPublic(); public: static int x; //全局变量 static int time; //全局变量 static int f(int y); //全局函数 ………… } 在公用类中对静态变量进行初始化和定义函数体: Public.cpp:(公用类程序文件) int CPublic::x = 0; //初始化全局变量 int CPublic::time; //定义全局变量 CPublic::CPublic() { } CPublic::~CPublic() { } int CPublic::f(int y) //全局函数,这里不要再加 static { y++; return y; } www.vfx110.com收集整理 www.vfx110.com收集整理 4、全局量的使用 使用变量:CPublic::变量名 使用函数:CPublic::函数() 如在视图的某函数中访问变量 x和函数 f(): void CTestView::xyz() { CPublic::x = 0; //访问变量 x CPublic::time = CPublic::f(1); //访问函数 f() ………… } 在其它类中访问 x、time和 f()的方法与此相同。 5、几点注意: ① 由于静态量可独立于类存在,不需要生成 CPublic类的实例。 ② 静态数据成员的定义和初始化必须在类外进行,如例中 x的初始化;变量 time虽然没有 初始化,但也必须在类外进行定义。由于没有生成 CPublic类的实例,所以它的构造函数和 析构函数都不会被执行,在里面做什么工作都没有什么意义。 ③ 如果静态函数需要访问 CPublic类内的变量,这些变量也必须为静态的。因为非静态量 在不生成实例时都不会存在。 如: class CPublic { public: int x; //内部变量 static int f(int y) //全局函数 { x++; return x; }; ………… }; 这里 x虽为类内成员,但如果不生成 CPublic 类的实例,就会出现函数 f()存在,而变量 x 不存在的问题。总之,用没有实例的类管理全局量是一个不错的选择,它具有集中管理,使 用方便的好处。当然,除非特别必要,全局量还是少用为好,一个好的编程者决不会随意滥 用全局量的,一个封装做得不好的程序,在修改维护时会让你吃足苦头。
本文档为【VC编程-MFC下全局变量和全局函数的定义和调用】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_688981
暂无简介~
格式:pdf
大小:92KB
软件:PDF阅读器
页数:3
分类:互联网
上传时间:2012-10-25
浏览量:25