分享某人的C++指向类成员函数的指针.doc_第1页
分享某人的C++指向类成员函数的指针.doc_第2页
分享某人的C++指向类成员函数的指针.doc_第3页
分享某人的C++指向类成员函数的指针.doc_第4页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

C+指向类成员函数的指针最近在开发中用到了函数指针,于是想整理了一下有关函数指针的概念。O(_)O首先 函数指针是指向一组同类型的函数的指针;而类成员函数我们也可以相似的认为,它是指向同类中同一组类型的成员函数的指针,当然这里的成员函数更准确的讲应该是指非静态的成员函数。前者是直接指向函数地址的,而后者我们从字面上也可以知道 它肯定是跟类和对象有着关系的。函数指针实例:typedef int (*p)(int,int);/定义一个接受两个int型且返回int型变量的函数指针类型int func(int x,int y)printf(func:x=%d,y=%d/n,x,y);return (xy?x:y);int main()p fun=func;/定义函数指针并给它赋上一个函数指针coutmin:(*fun)(4,5)endl;/为什么*fun需要用()扩起来呢?因为*的运算符优先级比()低,如果不用()就成了*(fun()return 0;而“指向类成员函数的指针”却多了一个类的区别:class Apublic:int func(int x,int y)printf(A:func:x=%d,y=%d/n,x,y);return (xy?x:y);typedef int (A:*p)(int,int);/指针名前一定要加上所属类型类名 A:的限定int main()p fun=&A:func;A a; /因为成员函数地址的解引用必须要附驻与某个对象的地址,所以我们必须创建某个对象。coutmin:(a.*fun)(4,5)endl;return 0;嘿嘿。只是用起来 .* 感觉怪怪滴。接下来 我们可以再扩展一下下:#include #include #include using namespace std;class Apublic:int func1(int x,int y)printf(A:func:x=%d,y=%d/n,x,y);return (xy?x:y);class B:public Apublic:virtual int func2(int x,int y)printf(B:func:x=%d,y=%d/n,x,y);return (x+y);typedef int (A:*p)(int,int);/指针名前一定要加上所属类型类名 A:的限定typedef int (B:*p0)(int,int);int main()A a; /因为成员函数地址的解引用必须要附驻与某个对象的地址,所以我们必须创建某个对象。B b;p fun=&A:func1;cout(a.*fun)(4,5)endl;cout(b.*fun)(4,5)endlendl;fun=&A:func2;cout(a.*fun)(4,5)endl;/请注意这里调用的是虚函数,嘿嘿 还真神奇 类成员函数指针也支持多态。cout(b.*fun)(4,5)endlendl; /fun=&B:func2; /这样式错误滴,因为不存在派生类的指向类成员函数的指针到基类的指向类成员函数的指针的隐式转换fun=(int (A:*)(int,int)&B:func2;/应该进行强制转换 cout(a.*fun)(4,5)endl; cout(b.*fun)(4,5)endlendl;p0 fun0=&B:func2;cout(a.*fun)(4,5)endl;cout(b.*fun)(4,5)endlendl;fun0=&A:func2; /正确,因为这里进行了隐式转换cout(a.*fun)(4,5)endl;cout(b.*fun)(4,5)endlendl;/从上面我们不难发现 指向类成员函数的指针基类和派生类的关系和指向类对象的指针基类和派生类的关系完全相反,/基类成员函数的布局被认为是派生类成员函数布局的一个子集return 0;接下 是有关模板类的类成员函数指针的使用实例如下:#include #include #include using namespace std;class Apublic:int func(int x,int y)printf(A:func : x=%d,y=%d/n,x,y);return (xy?x:y);templateclass Cpublic:T c;void Print()int (T:*p)(int,int)=&T:func;(c.*p)(4,5);int

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论