- 1
- 0
- 约 5页
- 2017-01-05 发布于北京
- 举报
[在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 ~% Cint 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 Dvoid 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 值得注意的是
您可能关注的文档
- 《29年金融理财师AFP资格考试样题.doc
- 《29年造价师考试巧计速记顺口溜.doc
- 《29年重庆市福建省辽宁省河北省海南省联考行测真题含解析.doc
- 《29年陕西中考语文试题及答案.doc
- 《29年银行从业风险管理预测试题及答案二.doc
- 《29年陕西省初中毕业学业考试语文试题word版有答案.doc
- 《29年赤峰市中考物理试题.doc
- 《29年辽宁省高考文科数学试卷及答案.doc
- 《29年青海职业能力测试真题含部分答案解析.doc
- 《29年青岛市中考数学试题及答案.doc
- 浙江省温州市2024-2025学年七年级上学期语文期末考查卷.docx
- 精品解析:北京市建华实验学校2024-2025学年七年级下学期期中英语试题(原卷版).docx
- 精品解析:北京市通州区2024-2025学年七年级下学期期末考试英语试卷(原卷版).docx
- 精品解析:北京市回民学校2024-2025学年九年级上学期期中语文试题(解析版).docx
- 精品解析:北京市海淀区2025-2026学年九年级上学期期末语文试题(解析版).docx
- 精品解析:北京市东城区汇文中学2025-2026学年八年级上学期期中语文试题(原卷版).docx
- 精品解析:北京市回民学校2024-2025学年九年级上学期期中语文试题(原卷版).docx
- 精品解析:2024-2025学年广东省广州市从化区街口镇中心小学人教版五年级上册期中测试数学试卷(解析版).docx
- 精品解析:北京市通州区2024-2025学年七年级下学期期末考试英语试卷(解析版).docx
- 精品解析:北京市建华实验学校2024-2025学年七年级下学期期中英语试题(解析版).docx
最近下载
- JGJ-T403-2017:建筑基桩自平衡静载试验技术规程.pdf VIP
- 2023-2024学年贵州省贵阳市九年级上学期物理期末试题及答案.pdf VIP
- 地方政府大数据发展的现实与理想 .pdf
- 证券从业之证券市场基本法律法规考试题库(考点梳理).docx
- 2026年高考物理模拟试卷必刷题——匀变速直线运动的研究.docx VIP
- 环境影响评价工程师之环评法律法规题库及参考答案【精练】.docx
- 伟迪捷喷码机培训精编版.ppt VIP
- 2023年国家公务员考试题库含完整答案【夺冠】.docx
- 广东省梅州市丰顺县2024-2025学年六年级(上)期末语文试卷(有答案).pdf VIP
- 2026年高考物理模拟试卷必刷题——力学实验.docx VIP
原创力文档

文档评论(0)