成员函数指针需绑定对象调用,定义为返回类型(类名::指针名)(参数),通过obj.ptr(args)或ptr_obj->*ptr(args)调用,静态成员函数可用普通函数指针直接调用。

在C++中,成员函数指针是一种特殊的指针类型,它指向类的成员函数。由于成员函数调用依赖于对象实例(即this指针),因此不能像普通函数指针那样直接使用。下面介绍如何定义、获取和调用类的成员函数指针。
成员函数指针的定义语法
成员函数指针的定义格式如下:
返回类型 (类名::*指针名)(参数列表)例如,有一个类MyClass:
public:
void func(int x) {
cout }
};
// 定义一个指向MyClass成员函数的指针
void (MyClass::*ptr)(int) = &MyClass::func;
获取成员函数指针
使用取地址符&加上类名和作用域操作符来获取成员函数的地址:
立即学习“C++免费学习笔记(深入)”;
void (MyClass::*ptr)(int) = &MyClass::func;注意:必须使用&ClassName::function的形式,不能省略类名。
调用成员函数指针
调用成员函数指针时,需要通过一个类的实例或指针进行。有两种方式:
- 通过对象实例调用:
(obj.*ptr)(args) - 通过对象指针调用:
(ptr_obj->*ptr)(args)
示例:
MyClass obj;(obj.*ptr)(10); // 输出: func called with 10
MyClass* pObj = &obj;
(pObj->*ptr)(20); // 输出: func called with 20
静态成员函数的特殊情况
静态成员函数不依赖this指针,其调用方式与普通函数相同,可以直接使用普通函数指针:
public:
static void staticFunc(int x) {
cout }
};
// 可以用普通函数指针
void (*fp)(int) = &MyClass::staticFunc;
fp(5); // 直接调用
基本上就这些。成员函数指针虽然语法略显复杂,但在某些场景如回调机制、状态机设计中非常有用。关键是记住调用时必须绑定到具体对象,并使用.*或->*操作符。










