类的成员函数指针
一个类的成员函数指针使用前,必须添加一个类的对象。
普通类的成员函数指针建立:
返回值 (类名::指针名)(函数参数)=void (A::*pt)(int,bool);
书中建议:
1)要在特定类的对象中调用成员函数指针
2)尽量利用typedef简化成员函数指针的声明
3)尽量不用成员函数指针
初级实例代码一:使用对象来调用类的成员函数指针
#include <iostream>
using namespace std;
class A { public: void set(int x,int y){i=x,j=y;} int get(){return i*j;} private: int i; int j; }; typedef void (A::*pt)(int ,int );//建立成员函数指针 void main() { pt p;//创建一个A类的函数指针p A a; //创建一个A类的对象a p=&A::set;//成员函数指针取函数地址 (a.*p)(10,20);//如何调用成员函数指针 cout<<a.get()<<endl; system("pause"); }
初级实例代码二:使用指针来调用类的成员函数指针
#include <iostream> using namespace std; class A { public: virtual void s1()=0; virtual void s2()=0; }; class B:public A { public: virtual void s1(){cout<<"我是B类的s1\n";} virtual void s2(){cout<<"我是B类的s2\n";} }; class C:public B { public: virtual void s1(){cout<<"我是C类的s1\n";} virtual void s2(){cout<<"我是C类的s2\n";} }; void main() { void (A::*pt)()=0; //成员函数指针pt,该指针指向抽象类A的成员函数 A *p=0; //建立一个类A的指针p并且将内存地址赋值为0 p=new B; //创建B,让p指向它 pt=&A::s1; //成员函数指针pt,取类A的s1函数的内存地址 (p->*pt)(); //通过指针p来访问对象,通过pt来访问该对象的成员函数 delete p; system("pause"); }
初级实例代码三:使用指针来调用类的成员函数指针数组
#include <iostream> using namespace std; class A { public: virtual void s1()=0; virtual void s2()=0; }; class B:public A { public: virtual void s1(){cout<<"我是B类的s1\n";} virtual void s2(){cout<<"我是B类的s2\n";} }; class C:public B { public: virtual void s1(){cout<<"我是C类的s1\n";} virtual void s2(){cout<<"我是C类的s2\n";} }; void main() { typedef void (A::*pt)(); pt pp[2]={&A::s1,&A::s2}; A *p1=new B; A *p2=new C; int i=0; for(i=0;i<2;i++) { (p1->*pp[i])(); (p2->*pp[i])(); } delete p1; delete p2; system("pause"); }