MFC 如何在一个类中使用在其他类中定义的变量或函数
【声明:本文的知识点来源于网络,参考网址: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 如何在一个类中使用在其他类中定义的变量或函数的更多相关文章
- Android中Webview使用javascript调用事先定义好的Java函数
1. 首先定义好一个类,专们用于给javascript调用 public class JavaScriptInterface { // share your news public void shar ...
- C#中为什么不能再方法里定义静态变量(Static)
c#的静态变量是在对象生成的时候分配内存空间的,而不是函数执行的时候. 如果在函数里定义,那么这个变量就需要在函数执行的时候分配内存空间,这是C#不允许的,至于为什么不允许,个是因为垃圾回收机制的问题 ...
- 第8.28节 Python中使用__setattr__定义实例变量和实例方法
一. 引言 根据前面章节介绍的内容,我们知道实例变量.实例方法的定义可以通过以下方法进行: 在类体中直接定义实例变量.实例方法: 在实例方法中定义实例变量.实例方法: 在类体外调用方使用赋值语句赋值定 ...
- ECMAScript中关于如何获取this的定义
文章中一些名词的翻译存疑,没有查过正式的中文名称 前面都是具体过程的解释,懒得看可以直接看获取思路 有关this的取值请移步JavaScript笔记--this的取值 获取this的过程 Runtim ...
- MFC中关于运行时类信息及动态创建对象的两个宏的意义(转)
http://blog.csdn.net/ligand/article/details/49839507 MFC运行时类信息 用途: 程序在运行时,获取对象类的信息及类的继承关系 实现: 1.定义的类 ...
- 在MFC中使用一个单独的类实现数据在各个类之间的传递
第一步:使用VS2010创建一个基于MFC的单文档程序,然后 编译 运行 确定没有问题. 第二步:添加一个名叫CGszCommonData 类. 第三步:在应用程序类的头文件里 添加#includ ...
- VS2010/MFC编程入门之四十五(MFC常用类:CFile文件操作类)
上一节中鸡啄米讲了定时器Timer的用法,本节介绍下文件操作类CFile类的使用. CFile类概述 如果你学过C语言,应该知道文件操作使用的是文件指针,通过文件指针实现对它指向的文件的各种操作.这些 ...
- Java中堆的实现类PriorityQueue队列接口Queue
Application:这层的职责是对接收到的数据做一些非业务性验证,事务的控制,最重要的是协调多个聚合之间的操作.这里应该可以清晰的表达出整个操作所做的事情,并且与通用语言是一致的. 以上我们讲到可 ...
- VS2010/MFC编程入门之三(VS2010应用程序工程中文件的组成结构)
VS2010/MFC编程入门之三(VS2010应用程序工程中文件的组成结构)-软件开发-鸡啄米 http://www.jizhuomi.com/software/143.html 鸡啄米在上一讲中 ...
随机推荐
- WASAPI、DirectSound/DS、WaveOut、Kernel Streaming/KS
先放结论: ASIO:硬件支持+对应驱动程序 DS:兼容性最好,一般也是默认的. WASAPI:是Vista之后的,较佳选择输出方式. 再来详细看: ASIO.WDM都是指音频通道,就是音频数据走的路 ...
- 国外的开源项目Shopizer部署问题
版本:shopizer-2.2.0 项目地址:https://github.com/shopizer-ecommerce/shopizer 使用IDEA时遇到和修改的问题 1.修改数据库类型为MYSQ ...
- JS一行代码,生成一个16进制随机颜色,简单粗暴。
var color = '#'+ Math.random().toString(16).substr(-6); document.body.style.backgroundColor = color; ...
- Building the Unstructured Data Warehouse: Architecture, Analysis, and Design
Building the Unstructured Data Warehouse: Architecture, Analysis, and Design earn essential techniqu ...
- 【Mysql】MySQL高效获取记录总数SQL_CALC_FOUND_ROWS
用法说明 分页程序一般由两条SQL组成: SELECT COUNT(*) FROM ... WHERE .... SELECT ... FROM ... WHERE LIMIT ... 如果使用SQL ...
- uoj #49. 【UR #3】铀仓库
http://uoj.ac/problem/49 这题二分答案可以做,同时存在另一个直接二分的解法. 考虑对每个点,二分能向左右延伸的最大半径,由于权值范围较大,不能O(1)查询向一侧走指定距离后到达 ...
- 阿里云ECS安装flannel启动问题
在阿里云ECS安装flannel,安装过程可以在网上找文章,这样的文章很多.我这里讲一下启动flannel遇到的两个问题的解决方法. 1,network.go:102] failed to retri ...
- 网站优化URL需要注意的几个细节
原文地址:http://www.douban.com/note/474016612/ 一个好的URL结构无论是对搜索引擎,还是用户,都具有非常重要的作用,那么什么样的URL才是既能面向搜索引擎, ...
- LCA最小公共父节点的解题思路
LCA最小公共父节点解法: 1.二叉搜索树: 中序遍历是升序,前序遍历即按序插入建树的序列. 二叉搜索树建树最好用前序+中序,如果用前序建树,最坏情况会退化为线性表,超时. 最近公共祖先甲级: A11 ...
- /dev/null 2>&1 解释
cmd >a 2>a 和 cmd >a 2>&1 为什么不同?cmd >a 2>a :stdout和stderr都直接送往文件 a ,a文件会被打开两遍,由 ...