预览加载中,请您耐心等待几秒...
1/5
2/5
3/5
4/5
5/5

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

HYPERLINK"http://blog.csdn.net/jinjinclouded/article/details/5189540"\o"C++指向类成员函数的指针"C++指向类成员函数的指针 最近在开发中用到了函数指针,于是想整理了一下有关函数指针的概念。O(∩_∩)O~ 首先函数指针是指向一组同类型的函数的指针;而类成员函数我们也可以相似的认为,它是指向同类中同一组类型的成员函数的指针,当然这里的成员函数更准确的讲应该是指非静态的成员函数。前者是直接指向函数地址的,而后者我们从字面上也可以知道它肯定是跟类和对象有着关系的。 函数指针实例: typedefint(*p)(int,int);//定义一个接受两个int型且返回int型变量的函数指针类型intfunc(intx,inty){printf("func:x=%d,y=%d/n",x,y);return(x<y?x:y);} intmain(){pfun=func;//定义函数指针并给它赋上一个函数指针cout<<"min:"<<(*fun)(4,5)<<endl;//为什么*fun需要用()扩起来呢?因为*的运算符优先级比()低,如果不用()就成了*(fun())return0;} 而“指向类成员函数的指针”却多了一个类的区别: classA{public:intfunc(intx,inty){printf("A::func:x=%d,y=%d/n",x,y);return(x<y?x:y);}};typedefint(A::*p)(int,int);//指针名前一定要加上所属类型类名A::的限定 intmain(){pfun=&A::func;Aa;//因为成员函数地址的解引用必须要附驻与某个对象的地址,所以我们必须创建某个对象。cout<<"min:"<<(a.*fun)(4,5)<<endl;return0;} 嘿嘿。。只是用起来.*感觉怪怪滴。 接下来我们可以再扩展一下下: #include<tchar.h>#include<iostream>#include<stdio.h>usingnamespacestd; classA{public:intfunc1(intx,inty){printf("A::func:x=%d,y=%d/n",x,y);return(x<y?x:y);}virtualintfunc2(intx,inty){printf("A::func:x=%d,y=%d/n",x,y);return(x>y?x:y);}};classB:publicA{public:virtualintfunc2(intx,inty){printf("B::func:x=%d,y=%d/n",x,y);return(x+y);} };typedefint(A::*p)(int,int);//指针名前一定要加上所属类型类名A::的限定typedefint(B::*p0)(int,int); intmain(){Aa;//因为成员函数地址的解引用必须要附驻与某个对象的地址,所以我们必须创建某个对象。Bb;pfun=&A::func1; cout<<(a.*fun)(4,5)<<endl;cout<<(b.*fun)(4,5)<<endl<<endl; fun=&A::func2;cout<<(a.*fun)(4,5)<<endl;//请注意这里调用的是虚函数,嘿嘿还真神奇类成员函数指针也支持多态。cout<<(b.*fun)(4,5)<<endl<<endl; //fun=&B::func2;//这样式错误滴,因为不存在派生类的"指向类成员函数的指针"到基类的"指向类成员函数的指针"的隐式转换fun=(int(A::*)(int,int))&B::func2;//应该进行强制转换cout<<(a.*fun)(4,5)<<endl;cout<<(b.*fun)(4,5)<<endl<<endl;p0fun0=&B::func2;cout<<(a.*fun)(4,5)<<endl;cout<<(b.*fun)(4,5)<<endl<<endl;fun0=&A::func2;//正确,因为这里进行了隐式转换cout<<(a.*fun)(4,5)<<endl;cout<<(b.*fun)(4,5)<<endl<<endl; //从上面我们不难发现指向类成员函数的指针基类和派生类的关系和指向类对象的指针基类和派生类的关系完全相反,//基类成员函数的布局被认为是派生类成员函数布局的一个子集return0;} 接下是有关模板类的类成员函数指针的使用 实例如下: #include<tchar.h>#include<iostream>#include<stdio.h>us