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或者全局函数,实现间接调用。

函数指针调用类的成员函数相关推荐

  1. 一般函数指针和类的成员函数指针

    转载请注明原文网址: http://www.cnblogs.com/xianyunhe/archive/2011/11/26/2264709.html 函数指针是通过指向函数的指针间接调用函数.函数指 ...

  2. 为什么不能线程调用类的成员函数_C++多线程编程之创建线程的几种方法

    点蓝色字关注"CurryCoder的程序人生" 微信公众号:CurryCoder的程序人生 怕什么真理无穷,进一寸有一寸的欢喜 1.线程基础知识 可执行程序运行起来,就会生成一个进 ...

  3. 详解函数指针和类成员函数指针

    作者:倾夜·陨灭星尘 一.什么是函数指针? 函数指针,顾名思义即指向函数的指针. 如果要问,为什么能用一个指针指向一个函数呢?我觉得要理解这个问题,以及要理解后面的函数指针和类成员函数指针,没有什么比 ...

  4. 浅析C++中的this指针 通过空指针(NULL)可以正确调用一些类的成员函数?

    有下面的一个简单的类: class CNullPointCall { public:     static void Test1();     void Test2();     void Test3 ...

  5. C++中空指针调用类成员函数的原理

    有下面的一个简单的类: class CNullPointCall { public:     static void Test1();     void Test2();     void Test3 ...

  6. C++:函数指针调用方法

    函数指针调用普通函数  #include<iostream>using namespace std;void Show()//void(*)() {cout << " ...

  7. C++ const对象与非const对象的相互调用、const成员函数与非const成员函数的相互调用

    1)const对象可以调用非const成员函数吗? 答:不能.const修饰的对象实则修饰的是该对象的this指针,并且const修饰的成员不能进行修改,如果使用const调用非const成员函数,可 ...

  8. Python中类调用类外面的函数

    #!/usr/bin/python3 #创建类 class cf():a = input("输入a:")b = input("输入b:")a = int(a)b ...

  9. 类的成员函数指针和静态成员函数指针 调用成员函数***

    C++提供static这个关键词对静态成员进行声明,静态成员函数和类的实例化无关,对于同一类来说,静态成员函数是所有类的对象共享的.而普通成员函数需要实例化才能调用,对于每一个实例来说,普通成员函数是 ...

最新文章

  1. 马尔可夫模型与条件随机场模型
  2. 穹顶下业务流程管理失位
  3. Qt探索之路——获取QTextEdit文本内容
  4. ArrayList的泛型可以不写吗
  5. Springboot 2.x上传文件大小限制
  6. Jenkins配置与使用
  7. C# 去除所有的html标签
  8. 正则只能出现特定字符_python正则表达式的简单使用总结
  9. Python3.6安装及引入Requests库
  10. 格式要求_课题论文的格式要求
  11. SpringMVC之安全性(三)Twitter登入
  12. mysql InnoDB引擎支持hash索引吗
  13. 读取文件时,文本文件的UTF-8格式带来的问题
  14. 深度学习之LSTM完全图解
  15. 基于FPGA的多人表决器(VHDL)
  16. UE4添加人物动画之前后左右移动
  17. Photographic Tone Reproduction for Digital Images
  18. vue3.0组合式api语法使用总结
  19. SpringBoot基础
  20. Wifi的密码长度有何限制

热门文章

  1. WMS仓储管理系统的使用价值,你知道多少
  2. 欧几里得几何(7)Eta
  3. I2C死锁原因及恢复方法
  4. 2018年的个人总结
  5. C语言自定义类型详解
  6. PHP基础传参,PHP四种传参方式
  7. Python 语音转文本
  8. 表格布局+flex:铁路12306
  9. CodeHub —— Github 的开源移动客户端
  10. ThinkPad 双显卡 NVidia + 集显 切换