【声明:本文的知识点来源于网络,参考网址: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. 在windows server 2012上安装.net3.5

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

  2. RTB业务知识之1-原生广告

    一.背景 Native Advertising (Native Ads), 又称为原生广告, 是2013全球媒体界爆红的关键词,从2012年年底,就有人开始提了这个名词,接着到处都可以看到这个名词,再 ...

  3. ALGO-119_蓝桥杯_算法训练_寂寞的数

    问题描述 道德经曰:一生二,二生三,三生万物. 对于任意正整数n,我们定义d(n)的值为为n加上组成n的各个数字的和.例如,d()=++=, d()=++++=. 因此,给定了任意一个n作为起点,你可 ...

  4. hive中的表

    一.内部表与外部表的比较 Hive表概念和关系型数据库表概念差不多.在Hive里表会和HDFS的一个目录相对应,这个目录会存放表的数据.目录默认是/usr/hive/warehouse/. 比如你在h ...

  5. golang中defer的理解

    在golang当中,defer代码块会在函数调用链表中增加一个函数调用.这个函数调用不是普通的函数调用,而是会在函数正常返回,也就是return之后添加一个函数调用.因此,defer通常用来释放函数内 ...

  6. [UE4]UMG编辑器:控件作为变量、预设锚点和自由锚点

  7. Mysql配置参数sync_binlog说明

    Mysql配置参数sync_binlog说明 mysql> select version(); +-----------+ | version() | +-----------+ | | +-- ...

  8. Pyhton基础知识(一)

    Pyhton基础知识(一)一.cpu 内存 硬盘 操作系统之间的关系1.cpu 中央处理器 运算中心与控制中心 相当于人的大脑.2.内存 暂时存储数据 将应用程序加载到内存 以便于cpu进行数据传输交 ...

  9. JVM调优常用参数

    JVM常用参数配置 -Xmx2048m 最大堆大小 -Xms1024m 初始堆大小 -Xmn1024m 年轻代大小 -XX:SurvivorRatio=8 Eden区与Survivor区的大小比值,设 ...

  10. conda和pip环境管理

    1.anaconda换源 制定清华的源: conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/ ...