恒美微站 Logo 恒美微站
  • 首页
  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心
  • 联系我们

C++---多态入门

  • 首页
  • 资讯中心
  • /
  • C++---多态入门

相关资讯

企业虚拟化平台国产化迁移实战:从VMware到浪潮InCloud Sphere 2026/8/2 18:02:53
N_m3u8DL-RE:跨平台流媒体下载神器,轻松保存加密视频和直播内容 2026/8/2 18:02:53
【2024复购率增长白皮书】:基于137个AI副业案例验证的「LTV×AI」复购公式 2026/8/2 18:02:54

最新资讯

空心杯舵机的选型、测试与调试:OSR6猎鹰实战指南
从单层氧化石墨烯到家用陶瓷水壶:远红外加热与小分子团水的物理基础(白露饮水场景应用)
从交通灯到LCVCO:射频振荡器设计与相位噪声优化
校园气象站厂家怎么选才不踩坑?从传感器到云平台的全流程避坑指南
STM32开发三大坑:调试连接、工程模板与黑盒思维
游戏开发中的三角剖分算法:从耳切法原理到C++工程实践

今日推荐

流式背压机制:避免前端渲染卡死与内存暴涨的滑动窗口限流
幂等性设计:在 Agent 自动重试与工具执行中的防重复扣费实战
向量检索与标量过滤混合查询:PostgreSQL pgvector 与 Milvus 的过滤下推实操

本周热门

备战数据库管理工程师校招:索引、事务、备份恢复核心考点解析
数字电路时序基石:深入理解建立时间与保持时间
蓝桥杯国赛超声波测距机:从单片机原理到嵌入式系统实战

本月精选

自研推理加速器Redwood:两周内实现PyTorch模型高效部署的实战教程
V4L2摄像头采集实战:从camera_client.rar到出图全流程解析
从“谁发明了钢琴键”到知识问答智能体:RAG与记忆工程实践

C++---多态入门

发布时间:2026/9/5 5:22:09
C++---多态入门 虚函数的重写所以虚函数的重写实际上在重写的是函数体多态的实现也是靠重写虚函数实现的。注意上边的ptr始终是Person类型的指针图片里说的ptr的指向是指的其指向的对象因为传给ptr的是指向Student的指针ptr指向的对象是Student指向哪个对象调用的就是该对象里的函数体。一道恶心的题问程序运行结果是什么class A { public: virtual void func(int val 1) { std::cout A- val std::endl; } virtual void test() { func(); } }; class B : public A { public: void func(int val 0) { std::cout B- val std::endl; } }; int main(int argc, char* argv[]) { B* p new B; p-test(); p-func(); return 0; }首先明确继承不是拷贝说白了只是改变了编译器的查找逻辑让编译器多到一个地方去找然后定义派生类的对象的时候在内存里上边先有一份基类下边才是自己的成员。p是指向B的指针p调用test函数是先在B里没找到再去A里找到了因此就调用A里的testA里的test的this指针指向的自然就是A*this指针去调用func由于this真正指向的是B因此就去调用B里的func跟上边同理仅仅只是使用函数体函数声明还是A里的函数声明因此val的缺省值是1。所以程序运行结果就是B-1。注意上边的分析都是建立在多态的前提之下的func构成多态满足多态的2个条件。这里别看两个func的参数缺省值不一样但它们是构成重写的重写有3同只要是返回值类型函数名函数参数列表相同(参数列表的类型相同)跟缺省值什么的都没关系。改编此时运行结果又如何。B* p new B; p-func();结果是B-0这里的调用就是普通调用根本不构成多态调用func的仅仅是B*类型的指针也就是派生类自己本类型的指针在调用自己类里边的成员函数。析构函数的重写class A { public: ~A() { cout ~A() endl; } }; class B : public A { public: ~B() { cout ~B() endl; } }; int main() { //普通调用就是直接看类型就可以了 A* p1 new A; A* p2 new B; delete p1; delete p2; return 0; }由于普通调用直接看类型p1和p2都是A类型的指针delete的时候自然就是调用了两次A类里的析构函数没有调用B类的析构此时造成内存泄露。delete的原理是先调用对应类的析构函数再调用operator delete底层用free释放资源。所以我们需要将~A()变成虚函数实现多态解决内存泄露。虚函数表(本质是函数指针数组)当派生类继承含有虚函数的基类时其虚函数表并非直接拷贝基类虚函数表而是以基类虚函数表为模板进行构建编译器先将基类虚函数表的所有条目完整继承到派生类虚函数表中若派生类重写了基类的某个虚函数会将派生类虚函数表中该虚函数对应位置的函数指针替换为派生类自身重写后的函数地址(即实现 “覆盖”)。派生类独有的、基类中没有声明的虚函数会按声明顺序追加到派生类虚函数表的末尾。

关于恒美微站

恒美微站专注于为个体商户、工作室提供极简自助建站服务,让每个人都能轻松拥有专业网站。

快速链接

  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心

服务项目

  • 可视化建站
  • 拖拽编辑
  • 主题定制
  • SEO 优化
  • 网站托管

联系方式

  • 📍 地址:北京市朝阳区建国路 88 号
  • 📞 电话:400-888-8888
  • ✉️ 邮箱:info@hmyw.cn
  • 🕐 时间:周一至周日 9:00-18:00

© 2024 恒美微站 hmyw.cn 版权所有 | 京 ICP 备 12345678 号