类的成员函数指针

一个类的成员函数指针使用前,必须添加一个类的对象。

普通类的成员函数指针建立:

返回值 (类名::指针名)(函数参数)=void (A::*pt)(int,bool);

初级实例代码一:

 1 #include <iostream>
 2 using namespace std;
 3
 4 class A
 5 {
 6 public:
 7     void set(int x,int y){i=x,j=y;}
 8     int get(){return i*j;}
 9 private:
10     int i;
11     int j;
12 };
13
14
15 typedef void (A::*pt)(int ,int );//建立成员函数指针
16
17
18 void main()
19 {
20     pt p;//创建一个A类的函数指针p
21     A a; //创建一个A类的对象a
22     p=&A::set;//成员函数指针取函数地址
23     (a.*p)(10,20);//如何调用成员函数指针
24     cout<<a.get()<<endl;
25     system("pause");
26 }

初级实例代码二:

 1 #include <iostream>
 2 using namespace std;
 3
 4 class A
 5 {
 6 public:
 7     virtual void s1()=0;
 8     virtual void s2()=0;
 9 };
10
11 class B:public A
12 {
13 public:
14     virtual void s1(){cout<<"我是B类的s1\n";}
15     virtual void s2(){cout<<"我是B类的s2\n";}
16 };
17
18 class C:public B
19 {
20 public:
21     virtual void s1(){cout<<"我是C类的s1\n";}
22     virtual void s2(){cout<<"我是C类的s2\n";}
23 };
24
25 void main()
26 {
27     void (A::*pt)()=0;    //成员函数指针pt,该指针指向抽象类A的成员函数
28     A *p=0;                //建立一个类A的指针p并且将内存地址赋值为0
29     p=new B;            //创建B,让p指向它
30     pt=&A::s1;            //成员函数指针pt,取类A的s1函数的内存地址
31     (p->*pt)();            //通过指针p来访问对象,通过pt来访问该对象的成员函数
32     delete p;
33     system("pause");
34 }
时间: 2024-10-13 19:36:15

类的成员函数指针的相关文章

类的成员函数指针(比較深入)

From:http://blog.csdn.net/hairetz/archive/2009/05/06/4153252.aspx 个人感觉对于类的成员函数指针这块解说的比較深入具体 推荐阅读 ///////////////////////////////////////////////// 先看这样一段代码 class test {    public:       test(int i){ m_i=i;}       test(){} void hello()       {        

VB6/VBA中跟踪鼠标移出窗体控件事件(类模块成员函数指针CHooker类应用)

前几天发了一篇博文,是关于获取VB类模块成员函数指针的内容(http://www.cnblogs.com/alexywt/p/5880993.html):今天我就发一下我的应用实例. VB中默认是没有鼠标移出事件响应的,而这个事件其实在项目开发中,实用性很强,很多时候需要在鼠标移出窗体或控件时做些事情:没有这个事件会感觉很费力: 今天我所说的实际案例就是,在窗体上,设计一个SplitterBar控件,窗体的最终用户使用这个控件可以在运行程序时任意调整其内部控件大小. 我在第二篇参考博文作者开发的

类的成员函数指针和mem_fun适配器的用法

先来看一个最简单的函数: void foo(int a) { cout << a << endl; } 它的函数指针类型为 void (*)(int); 我们可以这样使用: void (*pFunc)(int) = &foo; pFunc(123); 这就是函数指针的基本使用.   类的成员函数   那么,对于类的成员函数,函数指针有什么不同呢? 我们观察下面的类: class Foo { public: //void (Foo::*)(int) void foo(int

C++——类的成员函数指针以及mem_fun适配器

有这样一个类,我们以此类为基础: 1 class Foo 2 { 3 public: 4 5 //void (Foo::*)(int) 6 void foo(int a) 7 { 8 cout << a << endl; 9 } 10 11 //void (*)(int) 12 static void bar(int a) 13 { 14 cout << a << endl; 15 } 16 }; 我们尝试调用函数指针: void (*pFunc)(int)

获取VB类模块成员函数指针(转)

最近在做一些VB6.VBA的项目,被如何获取类模块中的函数指针这个问题所困扰,收集整理后,有2分资料值得收藏,特将关键部分留存,以备后续查找. 参照连接1:http://www.cnblogs.com/pctgl/articles/1352916.html 参照连接2:http://blog.csdn.net/lyserver/article/details/4224676 以下是链接1中的部分内容: 1. 函数地址 = GetClassProcAddress ( 指定为哪个函数 [上面解释],

C++学习之成员函数指针

C++中有函数指针,申明方式如下: void(*p)(float) 其中p就是一个函数指针,如果我们定义一个函数 void fun(float) 那么我们可以p = fun 或者p = &fun来给p赋值 于此同时还有一个概念叫做成员函数指针,这个指针和函数指针类似,所不同的是它是一个指向类的成员函数的指针,其声名方式如下: void (class_name::*p)(float) 这就代表p是一个指向class_name类中形如void fun_name(float)的函数的函数指针 赋值的方

一般函数指针与成员函数指针

函数指针,顾名思义,指向函数的指针. C++中函数指针的声明形式为: void (*pfn)() C++中函数指针的赋值:pfn=funName 或 &funName C++中函数指针的使用:pfn() 或(*fun)() 看到了上面的赋值跟使用的时候,我们不禁会产生疑问,为什么指针的赋值可以用函数名?又可以用取地址的形式赋值呢?为什么可以通过指针可以直接调用函数呢?指针不是需要解引用才能访问指向的内容吗?这个我表示也暂时不理解编译器编译的时候的具体赋值细节.不过这里我们可以先把函数名,当作数组

成员函数指针与高性能的C++委托

成员函数指针与高性能的C++委托(上篇) 撰文:Don Clugston 引子 标准C++中没有真正的面向对象的函数指针.这一点对C++来说是不幸的,因为面向对象的指针(也叫做"闭包(closure)"或"委托 (delegate)")在一些语言中已经证明了它宝贵的价值.在Delphi (Object Pascal)中,面向对象的函数指针是Borland可视化组建库(VCL,Visual Component Library)的基础.而在目前,C#使"委托&

类的成员函数的指针

前面一篇文章<函数的指针 >介绍了全局函数的指针,现在我们再来介绍一下成员函数的指针. 成员函数指针的定义: 一般形式 Return_Type (Class_Name::* pointer_name) (Argument_List); 用typedef简化的形式 Typedef Return_Type (Class_Name::* FuncPtr_Type) (Argument_List); FuncPtr_Type pFunc = NULL; //pFunc为成员函数指针的指针变量 成员函数