c++函数指针 成员变量

B中以函数指针动态设定执行函数fun,执行函数fun内部会调用成员变量a(a 是类A的实例)的方法

  1. #include <iostream.h>
  2. #include <string.h>
  3.     
  4. class A
  5. {
  6. public:
  7.     void show()
  8.     {
  9.         cout<<"show  a"<<endl;
  10.     }
  11.     void disp()
  12.     {
  13.         cout<<"disp  a"<<endl;
  14.     }
  15. };
  16. class B
  17. {
  18. public:
  19.     B()
  20.     {
  21.         num=32;
  22.     }
  23.     void setFun(char *name)
  24.     {
  25.         if(0==strcmp(name,"show"))
  26.         {
  27.             fun=show;
  28.         }
  29.         else if(0==strcmp(name,"disp"))
  30.         {
  31.             fun=disp;
  32.         }
  33.     }
  34.     void showfun()
  35.     {
  36.         (*fun)(*a);   //注意
  37.     }
  38.     int num;
  39. private:
  40.      friend void show(A& aa) // 成员变量以引用方式传递
  41.     {   
  42.         aa.show();
  43.         cout<<"b show"<<endl;   
  44.     }
  45.     friend void disp(A& aa)
  46.     {
  47.         aa.disp();
  48.         cout<<"b disp"<<endl;
  49.     }
  50.     A* a;
  51.     
  52.     void (*fun)(A&);
  53. };
  54. void main()
  55. {
  56.     B b;
  57.     b.setFun("show");
  58.     b.showfun();
  59.     cout<<endl;
  60.     b.setFun("disp");
  61.     b.showfun();
  62. }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值