C++函数指针和类成员函数指针
一、函数指针——基本形式
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++函数指针和类成员函数指针相关推荐
- C++普通函数指针和类成员函数指针
举例1:普通函数指针: int(*fun)(double, int);fun = [](double a, int b) {cout << a << endl;cout < ...
- 详解函数指针和类成员函数指针
作者:倾夜·陨灭星尘 一.什么是函数指针? 函数指针,顾名思义即指向函数的指针. 如果要问,为什么能用一个指针指向一个函数呢?我觉得要理解这个问题,以及要理解后面的函数指针和类成员函数指针,没有什么比 ...
- 基类成员函数和派生类成员函数不构成重载
基类成员和派生类成员的名字一样时会造成遮蔽,这句话对于成员变量很好理解,对于成员函数要引起注意,不管函数的参数如何,只要名字一样就会造成遮蔽.换句话说,基类成员函数和派生类成员函数不会构成重载,如果派 ...
- C++中空指针调用类成员函数的原理
有下面的一个简单的类: class CNullPointCall { public: static void Test1(); void Test2(); void Test3 ...
- 指向 类成员函数 指针的用法
C++在使用函数指针调用类成员函数的时候会遇到很多问题,以下是解决办法: 代码 //test.h class CMyc{ public:int fun(int);typedef int (CMyc:: ...
- 指向 类成员函数 的 函数指针
原文:http://www.vckbase.com/document/viewdoc/?id=1818 一.成员函数指针的用法 在C++中,成员函数的指针是个比较特殊的东西.对普通的函数指针来说,可以 ...
- 类成员函数指针和普通函数指针
前言: 先声明一下,普通函数指针和类成员函数指针有很大的区别!所以在绑定函数的时候也会发生很多的不同的情况,本文就函数指针可能出现的各种情况一一进行分析. 测试目录: 1.普通函数指针指向普通函数 2 ...
- c++ 线程函数(类成员函数作为线程函数使用)
C++类成员函数使用时,都会隐式传递一个this指针给该函数,this指针指向该类的对象.函数体可以通过显示调用该指针或直接访问类内成员. 回调函数是通过指针调用的函数,最常使用的回调函数就是在创建线 ...
- 友元(友元函数、友元类、类成员函数的友元)
友元(友元函数.友元类.类成员函数的友元) (friend)友元机制:允许一个类将对其非公有成员的访问权限授予指定的函数或者类. 我们可以将友元大致分为3类: 友元函数 友元类 类成员函数的友元 一: ...
最新文章
- Servlet生命周期与工作原理
- 怎么读取java文件,Java怎么读取文件
- 写文件 —— 将内容按照指定格式写入配置文件(fprintf()函数-》》本机的监听地址列表中port值)
- 网易云课堂计算机体系,计算机系统结构 (三) CPU及其结构分析
- jupyter notebook使用技巧
- 海通证券签约神策数据 数据赋能构建数字化运营闭环
- U3D prefab
- 取得程序运行的目录[360度]
- 三元表达式列表解析生成器表达式
- 回归模型的score得分为负_逻辑回归评分卡实现和评估
- 计蒜客 25985.Goldbach-米勒拉宾素数判定(大素数) (2018 ACM-ICPC 中国大学生程序设计竞赛线上赛 B)...
- 土豆视频ipad 5.0 客户端
- hmcl启动器安装游戏版本失败_HMCL 启动器教程 #2 安装游戏版本、模组加载器与高清修复...
- 在html中生成动态表格数据,JavaScript实现网页动态生成表格
- st语言 数组的常用方法_ST语言入门基础
- 史上最强窃密软件来袭,手机或成泄密工具
- python验证考拉兹猜想_Python考拉兹猜想输出序列代码实践
- 年薪45万阿里程序员想跳槽vivo,当他晒出期望工资,以为我看错了
- android BKS
- 高颜值时尚小巧蓝牙耳机推荐,女友生日过节最强送礼装备
热门文章
- Python 中argparse模块的使用
- python根据BM25实现文本检索
- python测速程序_Python大数据分析学习.测试程序执行速度
- 子类实现父类接口时注解为啥报错_Java中的注解使用:全面性的总结一下
- 最详细的R-CNN论文笔记
- Oracle11 startup报错,oracle11g 启动报错 缺少系统参数
- linux 文件指针,Linux中文件描述符fd与文件指针FILE*互相转换实例解析
- php memcached 设置过期,memcached过期时间无效
- 「雕爷学编程」Arduino动手做(35)——模拟量声音传感器
- System.gc()与Object.finalize()的区别