函数指针调用类的成员函数
1 在每个被调用函数之前加上static, 可以使成员函数脱离对象信息单独存在,虽然它属于这个类,但是没有附带上对象信息,但是前提是,static成员函数不能使用对象的信息(成员和函数)。
2 使用一个全局函数做中转,间接调用成员函数,如下代码修改Test3:
#include <stdio.h>
#include <iostream>
class Test3;
void _cdecl Helper(Test3 *test3);
class Test3
{
public:
void Memberfun1(void (*f2)(Test3 *))
{
f2(this);
}
void Memberfun2()
{
std::cout<<"Calling Test3::Memberfun2 OK"<<'/n';
}
void Memberfun3()
{
//Memberfun1(Memberfun2);//出错
Memberfun1(Helper);
}
};
void _cdecl Helper(Test3 *test3)
{
test3->Memberfun2();
}
int main()
{
Test3 t3;
t3.Memberfun2();
return 0;
}
3 使用一个函数参数函数对象信息的static类型的成员函数中转,间接调用其它成员函数。
#include <stdio.h>
#include <iostream>
class Test3
{
public:
static void _cdecl Helper(Test3 *test3)
{
test3->Memberfun2();
}
void Memberfun1(void (*f2)(Test3 *))
{
f2(this);
}
void Memberfun2()
{
std::cout<<"Calling Test3::Memberfun2 OK"<<'/n';
}
void Memberfun3()
{
Memberfun1(Helper);
}
};
int main()
{
Test3 t3;
t3.Memberfun2();
return 0;
}
由此可见,函数指针不能直接调用类的成员函数,因为成员函数指针和一般函数指针有着本质差别,因为成员函数带有很多对象信息。要解决调用的问题,应该使用static或者全局函数,实现间接调用。
函数指针调用类的成员函数相关推荐
- 一般函数指针和类的成员函数指针
转载请注明原文网址: http://www.cnblogs.com/xianyunhe/archive/2011/11/26/2264709.html 函数指针是通过指向函数的指针间接调用函数.函数指 ...
- 为什么不能线程调用类的成员函数_C++多线程编程之创建线程的几种方法
点蓝色字关注"CurryCoder的程序人生" 微信公众号:CurryCoder的程序人生 怕什么真理无穷,进一寸有一寸的欢喜 1.线程基础知识 可执行程序运行起来,就会生成一个进 ...
- 详解函数指针和类成员函数指针
作者:倾夜·陨灭星尘 一.什么是函数指针? 函数指针,顾名思义即指向函数的指针. 如果要问,为什么能用一个指针指向一个函数呢?我觉得要理解这个问题,以及要理解后面的函数指针和类成员函数指针,没有什么比 ...
- 浅析C++中的this指针 通过空指针(NULL)可以正确调用一些类的成员函数?
有下面的一个简单的类: class CNullPointCall { public: static void Test1(); void Test2(); void Test3 ...
- C++中空指针调用类成员函数的原理
有下面的一个简单的类: class CNullPointCall { public: static void Test1(); void Test2(); void Test3 ...
- C++:函数指针调用方法
函数指针调用普通函数 #include<iostream>using namespace std;void Show()//void(*)() {cout << " ...
- C++ const对象与非const对象的相互调用、const成员函数与非const成员函数的相互调用
1)const对象可以调用非const成员函数吗? 答:不能.const修饰的对象实则修饰的是该对象的this指针,并且const修饰的成员不能进行修改,如果使用const调用非const成员函数,可 ...
- Python中类调用类外面的函数
#!/usr/bin/python3 #创建类 class cf():a = input("输入a:")b = input("输入b:")a = int(a)b ...
- 类的成员函数指针和静态成员函数指针 调用成员函数***
C++提供static这个关键词对静态成员进行声明,静态成员函数和类的实例化无关,对于同一类来说,静态成员函数是所有类的对象共享的.而普通成员函数需要实例化才能调用,对于每一个实例来说,普通成员函数是 ...
最新文章
- 【对讲机的那点事】玩无线电,你知道的天线有多少种?
- xshell自动化脚本
- 我给学生做单车旅行的宣传讲座
- 每天学一点flash(71)折纸
- Java中设计模式之装饰者模式-2
- 解决百度云大文件不能被其他下载器下载
- java 变长参数 知乎_变长参数探究
- Parent Equipment 和IBASE relationship创建时的检查逻辑
- Python生成器实现及yield关键字
- Github 上近万星的深度学习模型大全!
- spring的延迟初始化bean (default-lazy-init 与 lazy-init )
- Android graphic: bitmap and it's principle
- 苏州十大IDC机房排名,苏州idc服务商实力排名
- 获取基金数据python库_PYTHON爬取基金数据及基金筛选
- OkHttp系列——使用教程
- Fiddler抓包流程
- 《软件测试过程改进》读书笔记
- 一 马尔可夫决策问题
- 第二十九篇:故障处理流程
- [求助]hyperledger fabric在创建peer通道时出现this policy requires 1 of the 'Writers' sub-policies to be……
热门文章
- (转)一键自动发布ipa(更新svn,拷贝资源,压缩资源,加密图片资源,加密数据文件,加密lua脚本,编译代码,ipa签名,上传ftp)...
- DataSet与Iterator用法总结
- 条件判断语句之if语句
- mysql备份与恢复实验报告_实验报告六MYSQL备份和恢复.doc
- Ubuntu命令行修改时间和时区
- mysql视图的作用
- intel realsense 深度视野范围与模组硬件说明
- 树莓派WIFI配置(隐藏WIFI,无密码WIFI,多个WIFI,加密WIFI)
- Tesseract .Net SDK C# OCR 2022.1
- 不朽凡人 正文 第五百零一章 有些不同的颜野