【声明:本文的知识点来源于网络,参考网址: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. sql语句事务

    set xact_abort on begin tran ... commit tran

  2. intellij idea 快捷输出 main方法的规律

    今天偶然发现了IntelliJ中 创建main函数的快捷键,依次还有for循环,System.out.println(); 在编写代码的时候直接输入psv就会看到一个psvm的提示,此时点击tab键一 ...

  3. spring AOP的学习

    1.Spring常用的概念 Joinpoint(连接点): 所谓连接点是指那些被拦截到的点.在spring中,这些点指的是方法,因为spring只支持方法类型的连接点. Pointcut(切入点): ...

  4. java线程实现的四种方式

    java多线程的实现可以通过以下四种方式 1.继承Thread类,重写run方法 2.实现Runnable接口,重写run方法 3.通过Callable和FutureTask创建线程 4.通过线程池创 ...

  5. vue之文本渲染

    Vue使用了基于HTML的模板语法,允许开发者声明式地将DOM绑定至底层Vue实例的数据.所有Vue的模板都是合法的HTML,所以能被遵循规范的浏览器和HTML解析器解析. 在前面,我们一直使用的是{ ...

  6. elasticsearch 安装(基于java运行环境)

    解压安装包 [root@Aliyun resource]# tar -xvf elasticsearch-5.5.2.tar.gz 添加当前主机的普通账户 [root@Aliyun resource] ...

  7. [UE4]蓝图中清空变量值或设置为null

    不赋值就会被设置为null了. 对象是否可使用,也可以这样判断

  8. [UE4]结构体

    只有数据变量属性,没有函数和事件

  9. sqlserver 数据简单查询

    use StudentManageDB go select StudentName as 姓名,Gender as 性别,出生日期=birthday from Students where Gende ...

  10. 4G模块*99#拨号上网

    操作系统:win10 模块型号:quectel EC20 CE FAG 4G模块拨号步骤如下: 1. 打开网络和internet设置 2. 选择“拨号” 3. 选择“设置新连接” 4. 选择“拨号调至 ...