首页 > 后端开发 > C++ > 正文

C++如何实现多态?(虚函数virtual用法)

尼克
发布: 2025-12-24 09:44:03
原创
366人浏览过
C++多态通过虚函数实现,基类指针或引用调用派生类重写函数,运行时动态绑定;纯虚函数(=0)定义抽象类,析构函数需virtual以防资源泄漏。

c++如何实现多态?(虚函数virtual用法)

多态在C++中主要通过虚函数(virtual)实现,核心是让基类指针或引用能调用派生类重写的函数,运行时决定具体执行哪个版本。

虚函数的基本写法

在基类中用 virtual 声明成员函数,派生类中用相同签名重新定义(可加 override 显式标注):

  • 基类函数必须声明为 virtual,否则调用永远绑定到基类版本
  • 派生类中不加 virtual 也能构成多态(继承虚属性),但建议加上或使用 override 提高可读性和安全性
  • 虚函数必须是类的非静态成员函数,不能是友元、构造函数或内联函数(除非编译器允许隐式展开)

纯虚函数与抽象类

把虚函数赋值为 = 0 就变成纯虚函数,含纯虚函数的类叫抽象类,不能实例化:

  • virtual void draw() = 0; 表示“所有派生类都必须实现 draw”
  • 抽象类可定义普通成员、虚函数甚至带实现的纯虚函数(C++11起支持)
  • 派生类只有全部实现纯虚函数后,才成为可实例化的具体类

析构函数要声明为 virtual

如果基类指针指向派生类对象,且要通过基类指针 delete 对象,基类析构函数必须是 virtual

模力视频
模力视频

模力视频 - AIGC视频制作平台 | AI剪辑 | 云剪辑 | 海量模板

模力视频 425
查看详情 模力视频

立即学习C++免费学习笔记(深入)”;

  • 否则只会调用基类析构函数,派生类部分资源无法释放(如内存泄漏、文件未关闭)
  • 即使基类没有数据成员或资源,只要可能被多态删除,就应加 virtual ~Base() = default;

多态调用的前提条件

虚函数机制只在“通过指针或引用”调用时生效:

  • Base* p = new Derived(); p->func(); → 调用 Derived::func()
  • Base& r = derived_obj; r.func(); → 同样触发动态绑定
  • Base b; b.func();Derived d; d.func(); → 静态绑定,不走虚表

基本上就这些。虚函数本质靠虚表(vtable)和虚指针(vptr)支撑,编译器自动管理,使用者只需关注声明和调用方式是否符合多态要求。

以上就是C++如何实现多态?(虚函数virtual用法)的详细内容,更多请关注php中文网其它相关文章!

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号