在C++中,成员函数指针需绑定类实例才能调用,定义格式为“返回类型 (类名::指针名)(参数列表)”,通过“(对象.指针)(参数)”或“(对象指针->*指针)(参数)”调用,适用于类内状态机或回调机制。

在C++中,成员函数指针与普通函数指针不同,因为它必须绑定到类的实例才能调用。要通过成员函数指针调用类的成员函数,需要两个要素:成员函数指符本身和一个类对象(或指针)。下面详细介绍如何在类中实现成员函数指针的定义与调用。
成员函数指针的声明需要包含类名、返回类型、参数列表,并使用特定语法。格式如下:
返回类型 (类名::*指针名)(参数列表)例如,有一个类 MyClass,包含一个成员函数:
class MyClass {
public:
void greet() {
std::cout << "Hello from member function!" << std::endl;
}
<pre class="brush:php;toolbar:false;"><pre class="brush:php;toolbar:false;">int add(int a, int b) {
return a + b;
}};
可以定义指向这些成员函数的指针:
立即学习“C++免费学习笔记(深入)”;
void (MyClass::*ptrToGreet)() = &MyClass::greet; int (MyClass::*ptrToAdd)(int, int) = &MyClass::add;
调用成员函数指针时,必须通过类对象或对象指针,使用 .* 或 ->* 操作符。
示例:
MyClass obj; (obj.*ptrToGreet)(); // 输出: Hello from member function! <p>MyClass<em> pObj = &obj; int result = (pObj-></em>ptrToAdd)(3, 4); // result = 7
你也可以在类的成员函数中定义并调用成员函数指针,适用于状态机、回调机制等场景。
例如:
class MyClass {
public:
void funcA() { std::cout << "Calling A\n"; }
void funcB() { std::cout << "Calling B\n"; }
<pre class="brush:php;toolbar:false;"><pre class="brush:php;toolbar:false;">using FuncPtr = void (MyClass::*)(); // 类型别名,简化声明
void callByPointer() {
FuncPtr ptr = &MyClass::funcA;
(this->*ptr)(); // 通过 this 调用
ptr = &MyClass::funcB;
(this->*ptr)();
}};
在 callByPointer 中,this 指针用于调用当前对象的成员函数。
成员函数指针常用于实现简单的状态机或策略选择:
class StateMachine {
using StateFunc = void (StateMachine::*)();
StateFunc currentState;
<pre class="brush:php;toolbar:false;"><pre class="brush:php;toolbar:false;">void stateIdle() { std::cout << "Idle\n"; }
void stateRunning() { std::cout << "Running\n"; }public: void setState(bool running) { currentState = running ? &StateMachine::stateRunning : &StateMachine::stateIdle; }
void update() {
(this->*currentState)();
}};
通过切换函数指针,实现行为变化。
基本上就这些。成员函数指针虽然语法略显复杂,但在需要动态绑定成员函数时非常有用。关键是记住操作符 .* 和 ->* 的使用,以及必须通过对象调用。不复杂但容易忽略细节。
以上就是C++如何在类中实现成员函数指针调用的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号