函数指针替代虚函数问题

函数指针替代虚函数问题

我试了一下,如果用函数指针的替代方案,依然可以实现这样的功能:


比如我声明一个BirdA数组,里面既可以有麻雀也可以有鸵鸟,而且他们可以调用自己的成员函数。


不知道这样和虚函数实现有什么区别吗?

正在回答

登陆购买课程后可参与讨论,去登陆

1回答

你好,没太明白你的问题。你可以给出具体的代码细节吗,否则理解很容易有歧义。

  • 慕斯卡9410682 提问者 #1
    vector<BirdA> T;
    T.push_back(SparrowA)(SparrowWalk));
    T.push_back(OstrichA)(OstrichWalk));
    T[0].WalkF();
    T[1].WalkF();


    2025-01-30 21:26:27
  • quickzhao 回复 提问者 慕斯卡9410682 #2

    虚函数和函数指针方式两种方式都可以实现,这个没有问题。重点是看场景:

    虚函数是 C++ 的内置特性,专为多态设计,自动管理对象的动态绑定,具有更高的类型安全性和代码可维护性。在绝大多数面向对象设计中,推荐使用虚函数来实现多态;

    函数指针的方式虽然可以达到类似的效果,但它更接近C风格编程,需要手动管理各个函数指针。仅当你有特殊需求,例如需要在运行时频繁更换行为,或者出于性能微调等原因时,才可能选择这种方式;这种情况下,它不如虚函数直观和安全,它的好处是直接调用函数指针,没有虚表的额外开销。所以一般来说,如果只是为了实现“同一容器内存放不同具体类型对象并调用各自的成员函数”的多态需求,使用虚函数是更优的选择。


    2025-02-02 18:21:17
  • 慕斯卡9410682 提问者 回复 quickzhao #3

    好的,谢谢老师

    2025-02-03 12:45:50
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
C++中高级工程师
  • 参与学习       117    人
  • 解答问题       51    个

无论你在哪个C++领域,越早提升高阶能力,职业发展越好 以工程实践驱动教学,全方位提升“内功,思维,设计,技术”能力 简历指导+1V1答疑+直播答疑等专属服务保障,学习无忧

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师