如何传递类成员函数的指针

来源:互联网 发布:网络创业培训的目的 编辑:程序博客网 时间:2024/05/17 07:23

 

需求:

在类A里面,有一组规格相同的函数;

类B中有一个成员F为A中成员函数的指针,在构造B对象时对该成员F进行初始化,然后在Do函数中调用此函数指针所对应的函数。

为实现这个目的,需要怎么做呢。

 

Class A

Void F1();

Void F2();

Void F3();

 

Class B

B( f )

Do ()

{

    F();

}

F

A* pA;

 

这里需要用到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对象地址传了进去。

原创粉丝点击