




全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
在MFC下如何定义全局变量和全局函数用MFC制作的工程由很多文件构成,它不能象一般C+程序那样随意在类外定义全局变量,在这里要想定义能被工程内多个文件共享的全局变量和函数必须用一些特殊方法才行。实际上有多种方法可以实现,这里只介绍两种方法。 一、在应用程序类中定义用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声明函数,该函数可以用“类名:函数名”方式访问,无需引用该类的实例,甚至这个类的实例可以不存在。利用这个性质实现的全局变量和函数使用起来很方便。值得注意的是,全局变量和全局函数最好集中封装,不要在文档、视图等类内部定义,这样用起来才有全局的感觉。例: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 CPublicpublic: 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。 4、全局量的使用使用变量:CPublic:变量名使用函数:CPublic:函数()如在视图的某函数中访问变量x和函数f():void CTestView:xyz() CPublic:x = 0。 /访问变量xCPublic: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类的实例,就会出现函数
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年高压环网柜项目规划申请报告
- 兽用中药制剂工国庆节后复工安全考核试卷含答案
- 铸管精整操作工中秋节后复工安全考核试卷含答案
- 婚姻家庭咨询师中秋节后复工安全考核试卷含答案
- 累计折扣合同(标准版)
- 液化气体生产工国庆节后复工安全考核试卷含答案
- 餐厅包场合同(标准版)
- 烧碱蒸发工中秋节后复工安全考核试卷含答案
- 制造企业车间成本控制措施
- 船舶电讯工中秋节后复工安全考核试卷含答案
- 年产四万吨聚脂长丝工厂设计说明书
- 四年级教材《劳动》课件
- 《电动汽车充电设备检验试验规范 第1部分:非车载充电机》
- 2024年河南鹤壁市鹤山区姬家山产业园政府专职消防员招聘笔试参考题库附带答案详解
- BCG 中国合成生物学产业白皮书2024
- 三年级数学倍的认识 省赛一等奖
- 新能源电动汽车的发展历程
- LS保温复合板施工方案
- 肾盂癌-疾病研究白皮书
- 共有权人同意卖房证明四篇
- 美学第二讲:美的本质
评论
0/150
提交评论