一、函数指针——基本形式

char Fun(int n) { return char(n); }
//char(*pFun)(int);void main()
{char(*pFun)(int);pFun = Fun;char c = (*pFun)(83);cout << c;
}

二、函数指针——typedef形式

char Fun(int n) { return char(n); }
//typedef char(*PFun)(int);
//PFun pFun;void main()
{typedef char(*PFun)(int);PFun pFun;pFun = Fun;char c = (*pFun)(83);cout << c;
}

三、类成员函数指针

class Base
{
public:char Fun(int n) { return char(n); }
};//typedef char (Base::*PFun)(int);
//PFun pFun;void main()
{typedef char (Base::*PFun)(int);PFun pFun;pFun = &Base::Fun;Base instance;char c = (instance.*pFun)(83);cout << c;
}

四、类成员函数指针——类指针

class Base
{
public:char Fun(int n) { return char(n); }
};//typedef char (Base::*PFun)(int);
//PFun pFun;void main()
{typedef char (Base::*PFun)(int);PFun pFun;pFun = &Base::Fun;Base *pInstance = new Base();char c = (pInstance->*pFun)(83);delete pInstance;cout << c;
}

五、类成员函数指针——内部调用(this->*)

class Base
{
public:char Fun(int n) { return char(n); }char Fun2(){char (Base::*pFun)(int);pFun = &Base::Fun;char c = (this->*pFun)(83);return c;}
};void main()
{Base instance;char c = instance.Fun2();cout << c;
}

六、类成员函数指针——继承调用

class Base
{
public:char Fun(int n) { return char(n); }char Fun2(int n){//char (Base::*pFun)(int);//pFun = &Base::Fun;typedef char (Base::*PFun)(int);PFun pFun = &Base::Fun;return Proc(n, pFun);}char Proc(int n, char(Base::*pFun)(int)){return (this->*pFun)(n);}
};class Derive : Base
{
public:char Fun(int n) { return char(n - 1); }char Fun2(int n){typedef char (Base::*PFun)(int);PFun pFun = static_cast<PFun>(&Derive::Fun);return Proc(n, pFun);}
};void main()
{Base base;char bc = base.Fun2(83);cout << bc;Derive derive;char dc = derive.Fun2(83);cout << dc;
}

七、类成员函数指针——虚拟函数

class Base
{
public:void OFun() { cout << "base ordinary" << endl; }virtual void VFun(int i) { cout << "base virtual" << endl; }
};class Derive : public Base
{
public:void OFun() { cout << "derive ordinary" << endl; }virtual void VFun(int i) { cout << "derive virtual" << endl; }
};void main()
{typedef void (Base::*BaseOFun)();typedef void (Derive::*DeriveOFun)();BaseOFun baseOFun = &Base::OFun;DeriveOFun deriveOFun = static_cast<DeriveOFun>(baseOFun);typedef void (Base::*BaseVFun)(int);typedef void (Derive::*DeriveVFun)(int);BaseVFun baseVFun = &Base::VFun;DeriveVFun deriveFVun = static_cast<DeriveVFun>(baseVFun);Base base;(base.*baseOFun)();(base.*baseVFun)(1);Derive derive;(derive.*deriveOFun)();(derive.*deriveFVun)(1);
}

转载于:https://www.cnblogs.com/live41/p/3877737.html

C++函数指针和类成员函数指针相关推荐

  1. C++普通函数指针和类成员函数指针

    举例1:普通函数指针: int(*fun)(double, int);fun = [](double a, int b) {cout << a << endl;cout < ...

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

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

  3. 基类成员函数和派生类成员函数不构成重载

    基类成员和派生类成员的名字一样时会造成遮蔽,这句话对于成员变量很好理解,对于成员函数要引起注意,不管函数的参数如何,只要名字一样就会造成遮蔽.换句话说,基类成员函数和派生类成员函数不会构成重载,如果派 ...

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

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

  5. 指向 类成员函数 指针的用法

    C++在使用函数指针调用类成员函数的时候会遇到很多问题,以下是解决办法: 代码 //test.h class CMyc{ public:int fun(int);typedef int (CMyc:: ...

  6. 指向 类成员函数 的 函数指针

    原文:http://www.vckbase.com/document/viewdoc/?id=1818 一.成员函数指针的用法 在C++中,成员函数的指针是个比较特殊的东西.对普通的函数指针来说,可以 ...

  7. 类成员函数指针和普通函数指针

    前言: 先声明一下,普通函数指针和类成员函数指针有很大的区别!所以在绑定函数的时候也会发生很多的不同的情况,本文就函数指针可能出现的各种情况一一进行分析. 测试目录: 1.普通函数指针指向普通函数 2 ...

  8. c++ 线程函数(类成员函数作为线程函数使用)

    C++类成员函数使用时,都会隐式传递一个this指针给该函数,this指针指向该类的对象.函数体可以通过显示调用该指针或直接访问类内成员. 回调函数是通过指针调用的函数,最常使用的回调函数就是在创建线 ...

  9. 友元(友元函数、友元类、类成员函数的友元)

    友元(友元函数.友元类.类成员函数的友元) (friend)友元机制:允许一个类将对其非公有成员的访问权限授予指定的函数或者类. 我们可以将友元大致分为3类: 友元函数 友元类 类成员函数的友元 一: ...

最新文章

  1. Servlet生命周期与工作原理
  2. 怎么读取java文件,Java怎么读取文件
  3. 写文件 —— 将内容按照指定格式写入配置文件(fprintf()函数-》》本机的监听地址列表中port值)
  4. 网易云课堂计算机体系,计算机系统结构 (三) CPU及其结构分析
  5. jupyter notebook使用技巧
  6. 海通证券签约神策数据 数据赋能构建数字化运营闭环
  7. U3D prefab
  8. 取得程序运行的目录[360度]
  9. 三元表达式列表解析生成器表达式
  10. 回归模型的score得分为负_逻辑回归评分卡实现和评估
  11. 计蒜客 25985.Goldbach-米勒拉宾素数判定(大素数) (2018 ACM-ICPC 中国大学生程序设计竞赛线上赛 B)...
  12. 土豆视频ipad 5.0 客户端
  13. hmcl启动器安装游戏版本失败_HMCL 启动器教程 #2 安装游戏版本、模组加载器与高清修复...
  14. 在html中生成动态表格数据,JavaScript实现网页动态生成表格
  15. st语言 数组的常用方法_ST语言入门基础
  16. 史上最强窃密软件来袭,手机或成泄密工具
  17. python验证考拉兹猜想_Python考拉兹猜想输出序列代码实践
  18. 年薪45万阿里程序员想跳槽vivo,当他晒出期望工资,以为我看错了
  19. android BKS
  20. 高颜值时尚小巧蓝牙耳机推荐,女友生日过节最强送礼装备

热门文章

  1. Python 中argparse模块的使用
  2. python根据BM25实现文本检索
  3. python测速程序_Python大数据分析学习.测试程序执行速度
  4. 子类实现父类接口时注解为啥报错_Java中的注解使用:全面性的总结一下
  5. 最详细的R-CNN论文笔记
  6. Oracle11 startup报错,oracle11g 启动报错 缺少系统参数
  7. linux 文件指针,Linux中文件描述符fd与文件指针FILE*互相转换实例解析
  8. php memcached 设置过期,memcached过期时间无效
  9. 「雕爷学编程」Arduino动手做(35)——模拟量声音传感器
  10. System.gc()与Object.finalize()的区别