C++程序中,函数指针数组是类的成员函数,他的语法怎么写
时间: 2023-05-27 15:02:51 浏览: 80
假设有一个类 class A,其中包含了几个成员函数,每个成员函数都可以被用作函数指针,在类中声明一个函数指针数组如下所示:
```c
class A {
public:
void function1(int);
void function2(float);
void function3(char);
void (*func_ptr[3])(int, float, char);
};
```
这里我们在类中声明了一个函数指针数组 func_ptr,它包含了三个元素,每个元素都是一个指向成员函数的指针。在这个例子中,我们假设有三个成员函数 function1、function2 和 function3,它们每一个的函数签名都是 (int, float, char),也就是说它们的参数列表都是 (int, float, char)。
在类定义之后,我们需要为这些函数指针进行初始化。假设我们想要将这些指针分别指向 class A 中的三个成员函数,那么可以这样做:
```c
void (*A::func_ptr[3])(int, float, char) = {
&A::function1,
&A::function2,
&A::function3
};
```
这里我们使用 &A::function1、&A::function2 和 &A::function3 分别取得了这三个成员函数的地址,并将它们分别赋值给 func_ptr 中的三个元素。
现在我们就可以使用这个函数指针数组来调用 class A 的成员函数了。例如,要调用 function1,可以这样写:
```c
A a;
int i = 1;
float f = 2.0;
char c = '3';
(a.*func_ptr[0])(i, f, c);
```
这里我们首先实例化了一个 class A 的对象 a,然后使用 *(a.func_ptr[0]) 的形式取得了 func_ptr 数组中的第一个元素,也就是指向 function1 的函数指针。然后使用 a.* 的形式来调用成员函数,最后传入了三个参数 i、f 和 c。
类似地,如果要调用 function2 和 function3,可以使用 *(a.func_ptr[1]) 和 *(a.func_ptr[2]),并分别传入相应的参数。