函数指针调用类的成员函数
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这个关键词对静态成员进行声明,静态成员函数和类的实例化无关,对于同一类来说,静态成员函数是所有类的对象共享的.而普通成员函数需要实例化才能调用,对于每一个实例来说,普通成员函数是 ...
最新文章
- 马尔可夫模型与条件随机场模型
- 穹顶下业务流程管理失位
- Qt探索之路——获取QTextEdit文本内容
- ArrayList的泛型可以不写吗
- Springboot 2.x上传文件大小限制
- Jenkins配置与使用
- C# 去除所有的html标签
- 正则只能出现特定字符_python正则表达式的简单使用总结
- Python3.6安装及引入Requests库
- 格式要求_课题论文的格式要求
- SpringMVC之安全性(三)Twitter登入
- mysql InnoDB引擎支持hash索引吗
- 读取文件时,文本文件的UTF-8格式带来的问题
- 深度学习之LSTM完全图解
- 基于FPGA的多人表决器(VHDL)
- UE4添加人物动画之前后左右移动
- Photographic Tone Reproduction for Digital Images
- vue3.0组合式api语法使用总结
- SpringBoot基础
- Wifi的密码长度有何限制