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. xshell自动化脚本
  3. 我给学生做单车旅行的宣传讲座
  4. 每天学一点flash(71)折纸
  5. Java中设计模式之装饰者模式-2
  6. 解决百度云大文件不能被其他下载器下载
  7. java 变长参数 知乎_变长参数探究
  8. Parent Equipment 和IBASE relationship创建时的检查逻辑
  9. Python生成器实现及yield关键字
  10. Github 上近万星的深度学习模型大全!
  11. spring的延迟初始化bean (default-lazy-init 与 lazy-init )
  12. Android graphic: bitmap and it's principle
  13. 苏州十大IDC机房排名,苏州idc服务商实力排名
  14. 获取基金数据python库_PYTHON爬取基金数据及基金筛选
  15. OkHttp系列——使用教程
  16. Fiddler抓包流程
  17. 《软件测试过程改进》读书笔记
  18. 一 马尔可夫决策问题
  19. 第二十九篇:故障处理流程
  20. [求助]hyperledger fabric在创建peer通道时出现this policy requires 1 of the 'Writers' sub-policies to be……

热门文章

  1. (转)一键自动发布ipa(更新svn,拷贝资源,压缩资源,加密图片资源,加密数据文件,加密lua脚本,编译代码,ipa签名,上传ftp)...
  2. DataSet与Iterator用法总结
  3. 条件判断语句之if语句
  4. mysql备份与恢复实验报告_实验报告六MYSQL备份和恢复.doc
  5. Ubuntu命令行修改时间和时区
  6. mysql视图的作用
  7. intel realsense 深度视野范围与模组硬件说明
  8. 树莓派WIFI配置(隐藏WIFI,无密码WIFI,多个WIFI,加密WIFI)
  9. Tesseract .Net SDK C# OCR 2022.1
  10. 不朽凡人 正文 第五百零一章 有些不同的颜野