需求:
在类A里面,有一组规格相同的函数;
类B中有一个成员F为A中成员函数的指针,在构造B对象时对该成员F进行初始化,然后在Do函数中调用此函数指针所对应的函数。
为实现这个目的,需要怎么做呢。
|
|
这里需要用到C++的一个特性:成员函数指针。这个特性一般很少用到,所以感觉比较晦涩,使用要点如下:
1. 使用typedef来定义A成员函数指针的类型:
typedef void (A::* FunC)();
这里将FunC定义为A类中返回值类型为空,参数列表为空的函数指针。
2. 在B中声明
FunC F; //将F声明为一个A中成员函数的指针。
3. 声明B的构造函数
B (A* a, Func f) { pA = a; F = f;}
4. Do中调用如下:
(pA->*F)();
5. 外部构造A、B对象,并进行方法调用。
A a;
B b1(&a, &A::F1);
B1.Do(); //这其中就会把F1调用起来。
B b2(&a, &A::F2);
B2.Do(); //这其中就会把F2调用起来。
特别说明:
C++的成员函数都隐含了一个this参数,也就是说要调用类对象的成员函数,首先必须要有该类的对象,正因此,才在B的构造函数中把A对象地址传了进去。