成员函数指针作为类型
时间: 2023-06-29 18:17:43 浏览: 92
一般函数指针和类的成员函数指针
成员函数指针可以作为类型使用,可以用它来定义函数指针变量、成员变量、函数参数等。
例如,假设有一个类`MyClass`,其中有一个成员函数`int add(int a, int b)`,可以定义一个函数指针类型`FuncPtr`,如下所示:
```
class MyClass {
public:
int add(int a, int b) {
return a + b;
}
};
using FuncPtr = int (MyClass::*)(int, int); // 定义函数指针类型
void func(FuncPtr pFunc, MyClass& obj, int a, int b) {
int result = (obj.*pFunc)(a, b); // 调用成员函数
// do something with result
}
int main() {
MyClass obj;
FuncPtr pFunc = &MyClass::add; // 定义函数指针变量
func(pFunc, obj, 1, 2); // 调用函数
return 0;
}
```
在上面的代码中,首先定义了一个`MyClass`对象`obj`,然后定义了一个成员函数指针类型`FuncPtr`,并使用`using`关键字定义了一个别名。接着定义了一个函数`func`,其中有一个参数是`FuncPtr`类型的成员函数指针变量`pFunc`。在`main`函数中,将`&MyClass::add`赋值给`pFunc`,并调用`func`函数,传入`pFunc`、`obj`和参数1、2。
需要注意的是,在定义成员变量时,需要使用指向成员函数的指针类型来定义,例如:
```
class MyClass {
public:
int add(int a, int b) {
return a + b;
}
private:
int (MyClass::*pFunc)(int, int); // 定义成员变量
};
```
在定义函数参数时,需要使用指向成员函数的指针类型来定义,例如:
```
class MyClass {
public:
int add(int a, int b) {
return a + b;
}
};
void func(int (MyClass::*pFunc)(int, int), MyClass& obj, int a, int b) {
int result = (obj.*pFunc)(a, b); // 调用成员函数
// do something with result
}
```
阅读全文