php类 函数指针,Pointer-to-Member function: 指向类方法的函数指针

该博客介绍了如何在C++中定义并使用函数指针,特别是指向类成员函数的指针。通过`FuncType`类型定义,可以动态选择`Demo`类的`Add`和`Mul`成员函数进行计算。`SelectMethod`方法允许切换所使用的成员函数,而`Compute`方法则根据选定的函数进行计算。示例代码展示了如何在`main`函数中动态调用这些方法,输出不同的计算结果。
摘要由CSDN通过智能技术生成

class Demo

{

public:

// 定义指针类型, 指向Demo类成员方法的函数指针

typedef int (Demo::* FuncType)(const int a, const int b);

// 定义一些成员函数

int Add(const int a, const int b)

{

return a + b;

}

int Mul(const int a, const int b)

{

return a * b;

}

// 选择上面一个成员函数

void SelectMethod(FuncType func)

{

compute_ = func;

}

// 根据选择的成员函数计算

int Compute(const int a, const int b)

{

return (this->*compute_)(a, b);

}

private:

FuncType compute_;

};

int main (int argc, char **argv)

{

Demo demo;

demo.SelectMethod(&Demo::Add);

cout << demo.Compute(100, 200) << endl;

demo.SelectMethod(&Demo::Mul);

cout << demo.Compute(100, 200) << endl;

return 0;

}

//output:

// 300

// 20000

如上述代码, 定义了一个指向类 Demo:: 的函数指针 FuncType, 其完整的类型为

int (Demo::* )(const int a, const int b);

所以调用的时候应当使用 object.* 或 object->* 的方式来访问 FuncType 的类型

(this->* compute_) // equal to: this->Add

(this->* compute_)(a, b) // equal to: this->Add(a, b)

//or

Demo demo;

(demo.*compute_) // equal to: demo.Add

(demo.*compute_)(a, b) // equal to: demo.Add(a, b)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值