关于如何在一个类使用函数指针保存其子类的非静态成员函数
2013-08-06 21:29
357 查看
#include<iostream>
using namespace std;
class A;
typedef void (A::*lpfn)();
class A
{
public:
lpfn fn;
};
class B:public A
{
public:
void OK(){cout<<"OK"<<endl;}
};
int main(void)
{
B b;
b.fn =(lpfn) &B::OK;
(b.*(b.fn))();/*这个位置比较重点。个人理解是OK代表函数体在类中的偏移量,b.fn=&B::OK,取的时OK的偏移量所在存储单元的
地址,*b.fn得到OK的偏移量,b.*b.fn=b的基地址加上OK在类中的偏移量,得到函数OK所在的内存地址*/
return 0;
}
using namespace std;
class A;
typedef void (A::*lpfn)();
class A
{
public:
lpfn fn;
};
class B:public A
{
public:
void OK(){cout<<"OK"<<endl;}
};
int main(void)
{
B b;
b.fn =(lpfn) &B::OK;
(b.*(b.fn))();/*这个位置比较重点。个人理解是OK代表函数体在类中的偏移量,b.fn=&B::OK,取的时OK的偏移量所在存储单元的
地址,*b.fn得到OK的偏移量,b.*b.fn=b的基地址加上OK在类中的偏移量,得到函数OK所在的内存地址*/
return 0;
}
相关文章推荐
- 关于如何在不使用虚函数的情况下父类调用子类成员函数的问题
- 关于如何将一个对象保存到本地文件之ObjectOutputStream、ObjectInputStream的使用小结。
- ASP.Net下如何解决关于Access数据库“操作必须使用一个可更新的查询”问题
- 多线程开发要点1:如何使用类的成员函数创建线程
- . 有一个一维数组,里面存储整形数据,请写一个函数,将他们按从大到小的顺序排列,要求执行效率高,并说明如何改善执行效率(该函数必须自己实现,不能使用php函数)。
- 关于类成员函数的使用
- Win7中如何在服务中启动一个当前用户的进程——函数CreateProcessAsUser()的一次使用记录
- 关于“静态变量不能跨函数使用”的一个疑问
- 如何输出类的非静态成员函数地址
- 关于hook设置函数如何支持多核CPU的一个说明
- Boost.Aiso教程 4 使用成员函数作为一个句柄
- 如何使用JRtpLib3.5.0库中的函数和类对象和让JRTPLIB 发送/接收数据时使用同一个端口收藏
- 关于hive hql时间函数如何使用
- 关于hook设置函数如何支持多核CPU的一个说明
- 关于如何使用VS高亮显示无扩展名源码文件的一个小技巧
- 使用tr1::function和tr1::bind实现类的非静态成员函数指针
- 关于hook设置函数如何支持多核CPU的一个说明
- 一个类成员函数绑定器的使用示例(二次绑定)
- C++关于tr1中绑定成员函数的bind使用
- 关于C++成员函数指针的使用