如何在类中使用函数指针

116 阅读1分钟

下面是一个以蜘蛛侠为背景的示例,演示如何在类的参数中使用函数指针:

#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函数的函数指针作为参数传入构造函数。然后调用spideytriggerSuperPower()函数,它会调用shootWeb函数。

接着,创建了另一个SpiderMan对象spidey2,并将climbWalls函数的函数指针作为参数传入构造函数。再次调用spidey2triggerSuperPower()函数,这次会调用climbWalls函数。

运行程序后,你将看到输出结果为:

Spider-Man is triggering his superpower!
Spider-Man shoots webs!
Spider-Man is triggering his superpower!
Spider-Man climbs walls!

这个示例展示了如何在类中使用函数指针,使得不同的对象可以具有不同的超能力实现。