MFC中如何定义全局变量

MFC中如何定义全局变量 3种方法:

1、在一个cpp文件中用extern声明,然后在其他文件中定义就可以用

 2、全局类的对象来实现

 3、在**APP类中做公有变量,其他类中用AfxGetApp()得到一个App对象指针就可引用 

 4、专门写一个全局类,里边的变量及方法全部声明为静态


======================================================

定义一个全局类的对象来实现
  
  其实生成这个自定义类对象,我们可以完全参照theApp对象的生成方式[1-2],自定义一个CMyPublicData的全局类。然后生成CMyPublicData全局对象,通过对象调用全局变量及全局函数。实现过程如下:
  (1)添加一个没有基类的新类,设类名起为CMyPublicData,可称之为公用类。
  单击“Insert”菜单下的“New Class”命令,选择“Class type”为“Generic Class”,在“Name”栏中填入类名“CMyPublicData”,单击“OK”,则新类建立完毕。
  (2)创建全局的变量与全局函数
  实际上是定义CMyPublicData类的public属性的成员变量和成员函数。
  CMyPublicData.h的内容:
  (3)包含公用类的头文件,使各个类都能访问它
  CMyPublicData的头文件应包含在应用程序类的头文件中,这样在其它类中引用CMyPublicData类时就不需要再包含了。若应用程序类的头文件为Example.h,其样式如下:
  (4)使用全局变量和全局函数
  可在整个工程中,利用MyPublicData.Public_x形式使用变量,可多次赋值,多次调用,利用MyPublicData.Public_f()形式调用函数。可实现了全局变量和全局函数。
==============================================================================================================================  
  3 利用应用程序类中定义实现
  
  用MFC生成的工程中都有一个名为CxxxApp的类,其中xxx一般为应用程序名,它继承了CWinApp类。CxxxApp类主要进行程序的初始化,生成文档、视图对象等工作。我们可以把需要全局访问的变量和函数定义为这个类的成员变量和成员函数。由于我们很容易获得CxxxApp类的指针,所以可以在文档、视图、对话框以及各种自定义类中访问到它们,达到与全局变量类似的效果。访问时用函数“AfxGetApp()”获得CxxxApp类的指针,用“AfxGetApp()->成员”访问变量或函数[2-3]。
  例:在Example.h头文件中(Example.h为应用程序类头文件)
  定义在CTestApp类中的变量和函数可以在其它类中被访问。比如在视图的某函数中要访问变量Public_x和函数这样,变量Public_x和函数Public_f()可以视作为全局的。
  以上两种方法可实现的全局变量和全局函数的运用。虽比较简单,但也有缺点,二者都是定义的成员变量和成员函数,在使用函数时,都要隐式地传递this指针。这样,有可能对类中的成员不必要的影响。而第二种方法,每次都需要获取应用程序类的指针,这样做比较麻烦。再就是把一些与应用程序类本身无关的变量和函数放在里面,使这个类看上去怪怪的,破坏了类的封装。
======================================================================================================================  
  4 利用静态变量和静态函数实现
  
  静态变量和静态函数有如下性质:
  若在一个类中用关键字static声明数据成员,则这个数据成员就只存在一个拷贝,无论该类创建了多少个实例,它始终只存在一个,即使该类的实例一个也没创建,它也存在。
  若在一个类中用关键字static声明函数,该函数可以用“类名::函数名”方式访问,无需引用该类的实例,甚至这个类的实例可以不存在。利用这个性质实现的全局变量和函数使用起来就很方便了。
  值得注意的是,全局变量和全局函数最好集中封装,不要在文档、视图等类内部定义,这样用起来才有全局的感觉。
  例如:
  (1)添加一个没有基类的新类,类名为CMyPublicData。

    单击“Insert”菜单下的“New Class”命令,选择“Class type”为“Generic Class”,在“Name”栏中填入类名“CMyPublicData”,单击“OK”,新类建立完毕。
  (2)包含公用类的头文件,使各个类都能访问它。
  CMyPublicData的头文件应包含在应用程序类的头文件中,这样在其它类中引用CMyPublicData类时就不需要再包含了。
  Test.h:(应用程序类头文件)
  #include "CMyPublicData.h" //包含公用类头文件
  class CTestApp: public CWinApp
  {……};
  (3)在公用类中定义全局变量和全局函数,均使用static修饰,静态变量还必须在类外定义和初始化。
  CMyPublicData.h(公用类头文件)
  在公用类中对静态变量进行初始化和定义函数体:
  CMyPublicData.cpp(公用类程序文件)
  int CMyPublicData::Public_x = 0; //初始化全局变量
  void CMyPublicData::f(int y) //全局函数,这里不再加static
  (4)全局量的使用
  可利用CMyPublicData::Public_x和CMyPublicData::Public_f()使用变量和函九。
  如在视图的某函数中访问变量Public_x和函数Public_f()。
  void CTestView::xxx(){
  CMyPublicData::Public_x = 0; //访问变量Public_x
  CMyPublicData::Public_f(); //访问函数Public_f()
  ……}
  在其它类中访问Public_x和Public_f()的方法与此相同。
  (5)几点注意:由于静态量可独立于类存在,不需要生成CPublic类的实例;静态数据成员的定义和初始化必须在类外进行,如例中Public_x的初始化。由于没有生成CPublic类的实例,所以它的构造函数和析构函数都不会被执行,在里面做什么工

=======================================================================================

如何在MFC中添加全局变量和全局函数

http://www.cnblogs.com/armstrong-cn/archive/2011/07/08/2100700.html

MFC中如何定义全局变量

http://blog.csdn.net/bill_ming/article/details/7407848

网摘:MFC中定义全局变量和全局函数的方法

http://blog.sina.com.cn/s/blog_683d67920100j4pz.html

MFC中定义全局变量和全局函数的方法

http://blog.163.com/yuyang_tech/blog/static/216050083201372343240296/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值