类B中以函数指针动态设定执行函数fun,执行函数fun内部会调用成员变量a(a 是类A的实例)的方法
- #include <iostream.h>
- #include <string.h>
- class A
- {
- public:
- void show()
- {
- cout<<"show a"<<endl;
- }
- void disp()
- {
- cout<<"disp a"<<endl;
- }
- };
- class B
- {
- public:
- B()
- {
- num=32;
- }
- void setFun(char *name)
- {
- if(0==strcmp(name,"show"))
- {
- fun=show;
- }
- else if(0==strcmp(name,"disp"))
- {
- fun=disp;
- }
- }
- void showfun()
- {
- (*fun)(*a); //注意
- }
- int num;
- private:
- friend void show(A& aa) // 成员变量以引用方式传递
- {
- aa.show();
- cout<<"b show"<<endl;
- }
- friend void disp(A& aa)
- {
- aa.disp();
- cout<<"b disp"<<endl;
- }
- A* a;
- void (*fun)(A&);
- };
- void main()
- {
- B b;
- b.setFun("show");
- b.showfun();
- cout<<endl;
- b.setFun("disp");
- b.showfun();
- }