下面是一个以蜘蛛侠为背景的示例,演示如何在类的参数中使用函数指针:
#include <iostream>
//定义一个spiderMan的类
class SpiderMan
{
public:
//定义一个函数指针类型
typedef void (*SuperPowerFunction)(void);
//构造函数,接受一个函数指针作为参数
SpiderMan(SuperPowerFunction superPowerFunc) : superPowerFunc_(superPowerFunc) {}
//成员函数,触发超能力
void triggerSuperPower()
{
std::cout << "蜘蛛侠触发超能力" << std::endl;
//调用函数指针指向的函数
if (superPowerFunc_ != nullptr)
{
superPowerFunc_();
}
}
private:
SuperPowerFunction superPowerFunc_;
};
//定义两个函数,作为超能力的实现
void shootWeb()
{
std::cout << "蜘蛛侠射击蜘蛛网" << std::endl;
}
void climbWalls()
{
std::cout << "蜘蛛侠爬墙" << std::endl;
}
int main()
{
//创建SpiderMan对象, 并传入函数指针
SpiderMan spidey(shootWeb);
//触发超能力
spidey.triggerSuperPower();
//创建另一个SpiderMan对象, 传入另一个函数指针
SpiderMan spidey2(climbWalls);
//触发超能力
spidey2.triggerSuperPower();
return 0;
}
上述示例代码中,定义了一个名为SpiderMan的类,它有一个参数为函数指针的构造函数。在triggerSuperPower()成员函数中,通过调用函数指针来触发超能力。
在main()函数中,首先创建了一个SpiderMan对象spidey,并将shootWeb函数的函数指针作为参数传入构造函数。然后调用spidey的triggerSuperPower()函数,它会调用shootWeb函数。
接着,创建了另一个SpiderMan对象spidey2,并将climbWalls函数的函数指针作为参数传入构造函数。再次调用spidey2的triggerSuperPower()函数,这次会调用climbWalls函数。
运行程序后,你将看到输出结果为:
Spider-Man is triggering his superpower!
Spider-Man shoots webs!
Spider-Man is triggering his superpower!
Spider-Man climbs walls!
这个示例展示了如何在类中使用函数指针,使得不同的对象可以具有不同的超能力实现。