全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

C++多态是什么_C++动态绑定原理与示例解析

C++多态指同一接口不同对象有不同行为,分静态(编译期函数/运算符重载、模板)和动态(运行期继承+虚函数+基类指针/引用调用)两类,需满足继承、virtual声明与override重写、基类指针或引用调用三条件,且基类析构函数应为virtual以防资源泄漏。

C++多态指的是“同一接口,不同对象有不同行为”。比如调用 speak(),Dog 输出 wang,Cat 输出 miao,Bird 输出 tweet——函数名一样,实际执行的代码却因对象类型而异。

多态分两类:静态和动态

静态多态发生在编译期,靠函数重载、运算符重载或模板实现。编译器一看参数类型或个数,立刻决定调用哪个函数。

动态多态发生在运行期,靠继承 + 虚函数 + 基类指针/引用调用实现。它不看变量声明类型,而是看它真正指向的对象类型。

  • 没虚函数 → 编译期绑定(哪怕指针指向子类,也只调基类函数)
  • 有虚函数 + 指针/引用调用 → 运行期查虚函数表,跳转到实际对象的函数版本

动态绑定怎么工作的

背后是编译器悄悄加的两个东西:vptr(虚函数指针)vtable(虚函数表)

  • 每个含虚函数的类,编译器生成一张 vtable,里面存着该类所有虚函数的地址
  • 每个该类的对象,开头(或结尾)自动加一个 vptr,指向自己类的 vtable
  • 当通过基类指针调用虚函数时:先顺着 vptr 找到 vtable,再按函数在表中的位置索引,拿到真实地址,最后跳过去执行

例如 Dog 继承 Animal 并重写 speak(),Dog 对象的 vtable 第一项就存着 Dog::speak 的地址,而不是 Animal::speak

必须满足的三个条件

缺一不可,否则多态不生效:

  • 有继承关系(子类 public 继承父类)
  • 基类中函数用 virtual 声明,子类用 override 明确重写(函数名、参数、返回值完全一致,协变返回类型除外)
  • 必须用基类指针或引用调用,不能直接用子类对象调用(如 dog.speak() 是静态绑定)

别忘了虚析构函数

如果用 Animal* p = new Dog,然后 delete p,没有虚析构函数的话,只会调 Animal::~Animal()Dog 自己的析构逻辑就丢了——资源泄漏风险。

所以只要类设计为被继承、且可能通过基类指针删除,析构函数就得加 virtual

基本上就这些。


# c++  # speak  # 运算符  # 多态  # 父类  # 子类  # 析构函数  # 引用调用  # 指针  # 继承  # 虚函数  # 接口  # public  # 函数重载  # 运算符重载  # delete  # 对象  # 重写  # 绑定  # 两类  # 自己的  # 或引用  # 发生在  # 只会 


相关文章: 建站主机核心功能解析:服务器选择与网站搭建流程指南  网站建设制作、微信公众号,公明人民医院怎么在网上预约?  建站之星安装需要哪些步骤及注意事项?  名字制作网站免费,所有小说网站的名字?  建站之星后台密码遗忘?如何快速找回?  深圳网站制作平台,深圳市做网站好的公司有哪些?  Swift中循环语句中的转移语句 break 和 continue  制作网站的软件下载免费,今日头条开宝箱老是需要下载怎么回事?  如何在企业微信快速生成手机电脑官网?  网站制作模板下载什么软件,ppt模板免费下载网站?  成都网站制作报价公司,成都工业用气开户费用?  c++怎么实现高并发下的无锁队列_c++ std::atomic原子变量与CAS操作【详解】  建站之星安全性能如何?防护体系能否抵御黑客入侵?  建站为何优先选择香港服务器?  如何通过老薛主机一键快速建站?  再谈Python中的字符串与字符编码(推荐)  高性能网站服务器部署指南:稳定运行与安全配置优化方案  兔展官网 在线制作,怎样制作微信请帖?  电影网站制作价格表,那些提供免费电影的网站,他们是怎么盈利的?  深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?  北京企业网站设计制作公司,北京铁路集团官方网站?  建站之星五站合一营销型网站搭建攻略,流量入口全覆盖优化指南  如何通过虚拟主机快速完成网站搭建?  大学网站设计制作软件有哪些,如何将网站制作成自己app?  如何用IIS7快速搭建并优化网站站点?  网站制作免费,什么网站能看正片电影?  实现点击下箭头变上箭头来回切换的两种方法【推荐】  如何规划企业建站流程的关键步骤?  建站之星如何快速解决建站难题?  最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?  如何在阿里云通过域名搭建网站?  如何在宝塔面板中修改默认建站目录?  小视频制作网站有哪些,有什么看国内小视频的网站,求推荐?  为什么Go需要go mod文件_Go go mod文件作用说明  成都品牌网站制作公司,成都营业执照年报网上怎么办理?  公司网站建设制作费用,想建设一个属于自己的企业网站,该如何去做?  深圳网站制作费用多少钱,读秀,深圳文献港这样的网站很多只提供网上试读,但有些人只要提供试读的文章就能全篇下载,这个是怎么弄的?  定制建站方案优化指南:企业官网开发与建站费用解析  视频网站制作教程,怎么样制作优酷网的小视频?  定制建站是什么?如何实现个性化需求?  如何快速重置建站主机并恢复默认配置?  网站制作员失业,怎样查看自己网站的注册者?  英语简历制作免费网站推荐,如何将简历翻译成英文?  岳西云建站教程与模板下载_一站式快速建站系统操作指南  C++如何使用std::optional?(处理可选值)  大型企业网站制作流程,做网站需要注册公司吗?  如何在阿里云虚拟服务器快速搭建网站?  宝塔新建站点为何无法访问?如何排查?  高防服务器租用指南:配置选择与快速部署攻略  建站主机与服务器功能差异如何区分? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。