【声明:本文的知识点来源于网络,参考网址:https://blog.csdn.net/bill_ming/article/details/7407848】

【以下三种方法亲测有效,可以根据具体情况来选择哪一种】

三种方法可以实现这个功能:

  1,在使用该变量的cpp文件中用external声明,在其他类中定义;
  2,在**App类中定义为public变量,在其他类中通过AfxGetApp()函数得到一个App对象指针,通过对象指针来调用;

  3,专门写一个全局类,类里面的变量和方法都声明为static。

下面详细介绍一下这三种方式:

  第一种: 在一个cpp中声明,另外一个cpp中定义。

  对于两个类的cpp文件,比如在 A.cpp 中定义一个变量 int x ; 在 B.cpp 中需要使用变量x,那么只需要在B.cpp中用 extern int x声明外部变量就可以使用了。

  第二种: 在App类中声明一个public 成员,在其他类中使用AfxGetApp()函数得到App 对象指针,然后通过指针来访问。下面看个例子:

  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() 
   …………
  }
  第三种:利用static修饰变量。

例:
  1、添加一个没有基类的新类,设类名起为CPublic,姑且称之为公用类
  单击“Insert”菜单下的“New Class”命令,选择“Class type”为“Generic Class”,在“Name”栏中填入类名“CPublic”,单击“OK”,则新类建立完毕。

  2、在公用类中定义全局变量和全局函数,均使用static修饰,静态变量还必须在类外定义和初始化

  Public.h:(公用类头文件)
  class CPublic
  {
  public: 
    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; 
  }

  2、包含公用类的头文件,使各个类都能访问它
  CPublic的头文件应包含在应用程序类的头文件中,这样在其它类中引用CPublic类时就不需要再包含了。

Test.h:(应用程序类头文件)
  #include "Public.h" //包含公用类头文件
  class CTestApp : public CWinApp
  {
  ………… 
  };

  4、全局量的使用
  使用变量:CPublic::变量名
  使用函数:CPublic::函数()
  如在视图的某函数中访问变量x和函数f():
  void CTestView::xyz()
  { 
    CPublic::x = 0; //访问变量x
    CPublic::time = CPublic::f(1); //访问函数f()
    …………
  } 
  在其它类中访问x、time和f()的方法与此相同。

MFC 如何在一个类中使用在其他类中定义的变量或函数的更多相关文章

  1. Android中Webview使用javascript调用事先定义好的Java函数

    1. 首先定义好一个类,专们用于给javascript调用 public class JavaScriptInterface { // share your news public void shar ...

  2. C#中为什么不能再方法里定义静态变量(Static)

    c#的静态变量是在对象生成的时候分配内存空间的,而不是函数执行的时候. 如果在函数里定义,那么这个变量就需要在函数执行的时候分配内存空间,这是C#不允许的,至于为什么不允许,个是因为垃圾回收机制的问题 ...

  3. 第8.28节 Python中使用__setattr__定义实例变量和实例方法

    一. 引言 根据前面章节介绍的内容,我们知道实例变量.实例方法的定义可以通过以下方法进行: 在类体中直接定义实例变量.实例方法: 在实例方法中定义实例变量.实例方法: 在类体外调用方使用赋值语句赋值定 ...

  4. ECMAScript中关于如何获取this的定义

    文章中一些名词的翻译存疑,没有查过正式的中文名称 前面都是具体过程的解释,懒得看可以直接看获取思路 有关this的取值请移步JavaScript笔记--this的取值 获取this的过程 Runtim ...

  5. MFC中关于运行时类信息及动态创建对象的两个宏的意义(转)

    http://blog.csdn.net/ligand/article/details/49839507 MFC运行时类信息 用途: 程序在运行时,获取对象类的信息及类的继承关系 实现: 1.定义的类 ...

  6. 在MFC中使用一个单独的类实现数据在各个类之间的传递

    第一步:使用VS2010创建一个基于MFC的单文档程序,然后  编译 运行 确定没有问题. 第二步:添加一个名叫CGszCommonData  类. 第三步:在应用程序类的头文件里 添加#includ ...

  7. VS2010/MFC编程入门之四十五(MFC常用类:CFile文件操作类)

    上一节中鸡啄米讲了定时器Timer的用法,本节介绍下文件操作类CFile类的使用. CFile类概述 如果你学过C语言,应该知道文件操作使用的是文件指针,通过文件指针实现对它指向的文件的各种操作.这些 ...

  8. Java中堆的实现类PriorityQueue队列接口Queue

    Application:这层的职责是对接收到的数据做一些非业务性验证,事务的控制,最重要的是协调多个聚合之间的操作.这里应该可以清晰的表达出整个操作所做的事情,并且与通用语言是一致的. 以上我们讲到可 ...

  9. VS2010/MFC编程入门之三(VS2010应用程序工程中文件的组成结构)

    VS2010/MFC编程入门之三(VS2010应用程序工程中文件的组成结构)-软件开发-鸡啄米 http://www.jizhuomi.com/software/143.html   鸡啄米在上一讲中 ...

随机推荐

  1. 浅谈负margin

    通常来说margin为正值时,我们很清楚其布局形式,即在border边界线处再往外扩展指定长度.可margin为负又表示什么呢,表示始于border边界线处并向内扩展指定长度,这样,下一个文档流对象便 ...

  2. 初识React:使用React完成Hello World程序

    正式学习React之前,通过一个简单的Hello Word程序来感受一下. <!DOCTYPE html> <html lang="zh-cn"> < ...

  3. 在windows server 2012上安装.net3.5

    1.dism.exe /online /enable-feature /featurename:NetFX3 /Source:D:\sources\sxs /all 2.Start the Local ...

  4. gcc编译工具生成动态库和静态库之一----介绍

     1.库的分类 根据链接时期的不同,库又有静态库和动态库之分. 静态库是在链接阶段被链接的(好像是废话,但事实就是这样),所以生成的可执行文件就不受库的影响了,即使库被删除了,程序依然可以成功运行. ...

  5. bzoj4020: 未来程序·改

    只需写一个解释器 第一次预处理将输入进行分词,分割出 关键字,运算符,变量/函数名,整数常量,并对变量/函数名离散化以便处理 第二次预处理建语法树,每个节点存节点类型,变量定义表等信息 运行时在语法树 ...

  6. 《Kubernetes权威指南》笔记-Pod、容器与Node的关系

  7. js面向对象1

    1.在空白的Object上加属性和方法: <script type="text/javascript"> function createPerson(name, qq) ...

  8. PAT 甲级 1006 Sign In and Sign Out (25)(25 分)

    1006 Sign In and Sign Out (25)(25 分) At the beginning of every day, the first person who signs in th ...

  9. Redis禁用持久化功能的设置

    原文转载至:https://www.cnblogs.com/rangeon/p/7067618.html 用过Redis的朋友都知道,这玩意有个比较强大的功能叫做持久化,就是在结束服务的时候把缓存中的 ...

  10. 从MediaStorehe和sd中删除媒体文件

    参考资料:http://www.sandersdenardi.com/querying-and-removing-media-from-android-mediastore/ 从媒体表中删除: pri ...