DoubleLi

qq: 517712484 wx: ldbgliet

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  4737 随笔 :: 2 文章 :: 542 评论 :: 1615万 阅读
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

用一个实际代码来说明。

  1. class A
  2. {
  3. public:
  4.     staticvoid staticmember(){cout<<"static"<<endl;}   //static member
  5.     void nonstatic(){cout<<"nonstatic"<<endl;}          //nonstatic member
  6.     virtualvoid virtualmember(){cout<<"virtual"<<endl;};//virtual member
  7. };
  8. int main()
  9. {
  10.     A a;
  11.     //static成员函数,取得的是该函数在内存中的实际地址,而且因为static成员是全局的,所以不能用A::限定符
  12.     void(*ptrstatic)()=&A::staticmember;      
  13.     //nonstatic成员函数 取得的是该函数在内存中的实际地址    
  14.     void(A::*ptrnonstatic)()=&A::nonstatic;
  15.     //虚函数取得的是虚函数表中的偏移值,这样可以保证能过指针调用时同样的多态效果
  16.     void(A::*ptrvirtual)()=&A::virtualmember;
  17.     //函数指针的使用方式
  18.     ptrstatic();
  19.     (a.*ptrnonstatic)();
  20.     (a.*ptrvirtual)();
  21. }

可以参考《C++ Primer(3rd)》第532页13.6指向类成员的指针一节~

 

 

1.一个指向外部函数的指针声明为:

  1. void(*pf)(char*,constchar*);
  2. void strcpy(char* dest,constchar* source);
  3. pf=strcpy;

2.一个指向类A成员函数的指针声明为

  1. void(A::*pmf)(char*,constchar*);

声明的解释是:pmf是一个指向A成员函数的指针,返回无类型值,函数带有二个参数,参数的类型分别是char * 和 const char *。除了在星号前增加A:: ,与声明外部函数指针的方法一样。

3.给成员指针赋值的方法是将函数名通过指针符号&赋予指针名
如下所示:

    1. class A
    2. {
    3.   public:
    4.    void strcpy(char*,constchar*);
    5.    void strcat(char*,constchar*);
    6. };
    7. pmf =&A::strcpy;
posted on   DoubleLi  阅读(23635)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
历史上的今天:
2013-03-12 如何在Web上判断是否已经安装了某个ActiveX控件
2012-03-12 C#对象的浅拷贝,深拷贝
2012-03-12 C#通过序列化实现深拷贝
2012-03-12 扩展IList对象,实现深拷贝扩展方法
点击右上角即可分享
微信分享提示