在mfc下如何定义全局变量和全局函数

在mfc下如何定义全局变量和全局函数

ID:12916127

大小:35.50 KB

页数:5页

时间:2018-07-19

在mfc下如何定义全局变量和全局函数_第1页
在mfc下如何定义全局变量和全局函数_第2页
在mfc下如何定义全局变量和全局函数_第3页
在mfc下如何定义全局变量和全局函数_第4页
在mfc下如何定义全局变量和全局函数_第5页
资源描述:

《在mfc下如何定义全局变量和全局函数》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、在MFC下如何定义全局变量和全局函数 用MFC制作的工程由很多文件构成,它不能象一般C++程序那样随意在类外定义全局变量,在这里要想定义能被工程内多个文件共享的全局变量和函数必须用一些特殊方法才行。实际上有多种方法可以实现,这里只介绍两种方法。9h&q&`8U9J#n"}(^3G;@3G1E'R-c:w/h  一、在应用程序类中定义0l6I5}(~)H&c!S&u  用MFC生成的工程中都有一个名为CxxxApp的类,它派生于CWinApp类。这个类主要进行程序的初始化,生成文档、视图对象等工作。我们

2、可以把需要全局访问的变量和函数定义为这个类的成员变量和成员函数,就可以实现全局访问了。5M;Q.i'K0_(x3s;B  从严格意义上讲,这种变量和函数并不是全局的,因为它仍然只是类中的成员,只是由于我们很容易获得CxxxApp类的指针,所以我们可以在文档、视图、对话框以及各种自定义类中访问到它们,达到与全局变量类似的效果。访问时用函数“AfxGetApp()”获得CxxxApp类的指针,用“AfxGetApp()->成员”访问变量或函数。(S3E3w,m!a;A  例:0H:u  ]9t6r  Te

3、st.h:(应用程序类头文件)classCTestApp:publicCWinApp+i;Q+}0P&a%}0b*n{2X  F6W*s1d2t([8B,G#v public:)~4l5?4O%R)U*[  g4{:p-}  intx;//全局变量  intf(inty);//全局函数)X  s+s'N+U  …………};!z49d3Y.b3d!B+R!D0g3u!r)y%I'q!d  Test.cpp:(应用程序类程序文件)'z8b%C3

4、;P.y2~%CintCTestApp::f(inty)/

5、/全局函数定义-O6{5D:V#t{,p*~2m!T;n/B/b(h y++;  }:^$_*B"M+Z0v/m;['T returny;+u#

6、#D"d0].Q(D!z'M}6k%m7D"W&@)w  E8O#O+H$U"G0f#l  定义在CTestApp类中的变量和函数可以在其它类中被访问。比如在视图的某函数中要访问变量x和函数f():/a/h*l4~/[0S2DvoidCTestView::xyz(){ CTestApp*app=(CTestApp*)AfxGetApp();//生成指向应用程

7、序类的指针/T#U6{%Q-@&l app->x=0;//访问变量x intz=app->f(1);//访问函数f()0R,b%b'u$~(F)X8n%^4f …………  w;l:R  n/A1d7o}#P2}*L*},R"J2A  t6_:C9a%~0F  这样,变量x和函数f()可以视作为全局的。%@)I/x-u#a  用这种方法实现的全局变量和全局函数虽比较简单,但也有缺点,一是访问不太方便,每次都需要获取应用程序类的指针;再就是把一些与应用程序类本身无关的变量和函数放在里面,使这个类看上去怪怪

8、的,破坏了类的封装。/B6h7x$I9J%~0V3t!P  二、用静态变量和静态函数实现,[%J1k4f4B+~(l#a%q-U!r  很喜欢API函数的那种调用方法,不论在哪个类中只要用“::API函数”就可以调用了。合理利用静态类型(static)可以实现与此相似的全局变量和全局函数。  静态变量和静态函数有如下性质:2S!z+O6v7{5T  若在一个类中用关键字static声明数据成员,则这个数据成员就只存在一个拷贝,无论该类创建了多少个实例,它始终只存在一个,即使该类的实例一个也没创建,它也

9、存在。*x)S4j/b)u-k/r-P,p3X;G5M  E3p  I*H  若在一个类中用关键字static声明函数,该函数可以用“类名::函数名”方式访问,无需引用该类的实例,甚至这个类的实例可以不存在。(z"@,e"v6o2W'_)V  利用这个性质实现的全局变量和函数使用起来很方便。(R*i2l4p9[.y7O  值得注意的是,全局变量和全局函数最好集中封装,不要在文档、视图等类内部定义,这样用起来才有全局的感觉。  例:1w,t)P$z%e3O5@5{6Q  1、添加一个没有基类的新类,设类

10、名起为CPublic,姑且称之为公用类"^$p1

11、![%P%n9{)?$?  单击“Insert”菜单下的“NewClass”命令,选择“Classtype”为“GenericClass”,在“Name”栏中填入类名“CPublic”,单击“OK”,则新类建立完毕。"N6H9L58P8J4s  @'X  2、包含公用类的头文件,使各个类都能访问它7c-P)v-K+R$q)p-F-z)o.H/E;h9a.d  CPublic的头文件应包含在应用程序类的头

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。