I在MFC下如何定义全局变量和全局函数.docVIP

I在MFC下如何定义全局变量和全局函数.doc

  1. 1、本文档共5页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
I在MFC下如何定义全局变量和全局函数

在MFC下如何定义全局变量和全局函数  用MFC制作的工程由很多文件构成,它不能象一般C++程序那样随意在类外定义全局变量,在这里要想定义能被工程内多个文件共享的全局变量和函数必须用一些特殊方法才行。实际上有多种方法可以实现,这里只介绍两种方法。 9 h q `8 U9 J# n }( ^ 3 G; @3 G1 E R- c: w/ h   一、在应用程序类中定义0 l6 I5 }( ~) H c! S u   用MFC生成的工程中都有一个名为CxxxApp的类,它派生于CWinApp类。这个类主要进行程序的初始化,生成文档、视图对象等工作。我们可以把需要全局访问的变量和函数定义为这个类的成员变量和成员函数,就可以实现全局访问了。 5 M; Q. i K0 _( x3 s; B   从严格意义上讲,这种变量和函数并不是全局的,因为它仍然只是类中的成员,只是由于我们很容易获得CxxxApp类的指针,所以我们可以在文档、视 图、对话框以及各种自定义类中访问到它们,达到与全局变量类似的效果。访问时用函数“AfxGetApp()”获得CxxxApp类的指针,用 “AfxGetApp()-成员”访问变量或函数。 ( S3 E3 w, m! a; A   例: 0 H: u??]9 t6 r   Test.h:(应用程序类头文件) class CTestApp : public CWinApp + i; Q+ }0 P a% }0 b* n { 2 X??F6 W* s1 d2 t( [8 B, G# v  public: ) ~4 l5 ?4 O% R) U* [??g4 {: p- }   int x; //全局变量   int f(int y); //全局函数 ) X??s+ s N+ U   ………… }; ! z4 \9 d3 Y. b3 d! B + R! D0 g3 u! r) y% I q! d   Test.cpp:(应用程序类程序文件) z8 b% C3 |; P. y2 ~% C int CTestApp::f(int y) //全局函数定义 - O6 {5 D: V# t { , p* ~2 m! T; n/ B/ b( h  y++; ??}: ^$ _* B M+ Z0 v/ m; [ T  return y; + u# |# D d0 ]. Q( D! z M } 6 k% m7 D W @ ) w??E8 O# O+ H$ U G0 f# l   定义在CTestApp类中的变量和函数可以在其它类中被访问。比如在视图的某函数中要访问变量x和函数f(): / a/ h* l4 ~/ [0 S2 D void CTestView::xyz() {  CTestApp *app = (CTestApp *)AfxGetApp(); //生成指向应用程序类的指针 / T# U6 {% Q- @ l  app-x = 0; //访问变量x  int z = app-f(1); //访问函数f() 0 R, b% b u$ ~( F) X8 n% ^4 f  …………??w; l: R??n/ A1 d7 o } # P2 }* L* }, R J2 A??t6 _: C9 a% ~0 F   这样,变量x和函数f()可以视作为全局的。% @) I/ x- u# a   用这种方法实现的全局变量和全局函数虽比较简单,但也有缺点,一是访问不太方便,每次都需要获取应用程序类的指针;再就是把一些与应用程序类本身无关的变量和函数放在里面,使这个类看上去怪怪的,破坏了类的封装。 / B6 h7 x$ I9 J% ~0 V3 t! P   二、用静态变量和静态函数实现 , [% J1 k4 f4 B+ ~( l# a% q- U! r   很喜欢API函数的那种调用方法,不论在哪个类中只要用“::API函数”就可以调用了。合理利用静态类型(static)可以实现与此相似的全局变量和全局函数。   静态变量和静态函数有如下性质:2 S! z+ O6 v7 {5 T   若在一个类中用关键字static声明数据成员,则这个数据成员就只存在一个拷贝,无论该类创建了多少个实例,它始终只存在一个,即使该类的实例一个也没创建,它也存在。* x) S4 j/ b) u - k/ r- P, p3 X; G5 M??E3 p??I* H   若在一个类中用关键字static声明函数,该函数可以用“类名::函数名”方式访问,无需引用该类的实例,甚至这个类的实例可以不存在。 ( z @, e v6 o2 W _) V   利用这个性质实现的全局变量和函数使用起来很方便。( R* i2 l4 p9 [. y7 O   值得注意的是

文档评论(0)

yingxiaorong28 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档