C++中类的函数指针

C语言中如果我们要定义一个函数指针,比如如下的两个函数:

int numAdd(int a, int b)
{
  return a+b;
}
int numMinus(int a, int b)
{
  return a-b;
}
我们可以定义一个指针:
int (*funcTwo)(int, int) = numAdd;

这样就可以直接用funcTwo(1, 2)来实现 numAdd(1,2)的功能了。

一般更通用的做法是把函数当做一个参数来参与逻辑的执行:

typedef int (*PtrFuncTwo)(int, int);
int algo(int a, int b , PtrFuncTwo pft)
{
	return pft(a, b);
}

int _tmain(int argc, _TCHAR* argv[])
{
	int a = algo(1, 2, numAdd);
	return 0;
}
这样我们就可以在运行通过逻辑的不同,给algo传递不同的PtrFuncTwo的函数指针,来实现对数据进行不同过的逻辑处理。

C++中引入了类的概念,如果定义一个指向类的成员函数的指针呢?语法如下

 class CA{
 public:
	int caAdd(int a, int b) {return a+b;}
	int caMinus(int a, int b){return a-b;};
};

 class CB{
 public:
	int cbAdd(int a, int b){return a*b;}
	int cbMinus(int a, int b){return a/b;}
};

typedef int (CA::*PtrCaFuncTwo)(int ,int);
PtrCaFuncTwo pft= &CA::caAdd;

	CA ab;
	int c = (ab.*pft)(1,2);

通过 一下命令定义一个指向CA一个函数的指针类型

typedef int (CA::*PtrCaFuncTwo)(int ,int);

然后定义一个该类型的一个指针,并将CA的caAdd函数地址付给这个指针:
PtrCaFuncTwo pft= &CA::caAdd;
当使用时,通过对象的 (ab.*pft)(1,2), 来使用这个函数。如果我们实现上面C语言那样的功能,可以用如下代码:

int algoEx(int a, int b, PtrCaFuncTwo pcft, CA* pca)
{
	return (pca->*pcft)(a, b);
}
上面演示了如果通过一个对象的指针,一个指向类的成员函数的指针来进行函数调用的例子。



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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值