多态、虚函数表、底层实现、多重继承的问题及处理
本文代码摘自 http://dwz.date/PST; 视频解析:十分钟带你搞明白虚函数、虚表、多态的原理以及多重继承带来的问题_哔哩哔哩_bilibili
1、多态:
基类指针只能调用基类的成员函数,不能调用派生类的成员函数;如果在基类的成员函数前加上virtual 关键字,把它声明为虚函数;基类指针就可以调用派生类的同名函数;通过派生类中的同名函数访问派生类的成员变量;有了虚函数,基类指针指向基类对象时,就使用基类的成员函数和数据,指向派生类的对象时,就使用派生类的成员函数和数据;基类指针表现出的多种形式,称为多态;
派生类重载时最好在参数列表后 加上 override 关键字,防止函数名写错;
基类的引用也可以使用多态;
如果基类中有虚函数,对象的内存模型中就会有一个虚函数表,表中存放了基类的函数名和地址;派生类中重定义了基类的虚函数,创建派生对象时,将用派生类的函数取代虚函数表中的基类的函数;
静态多态:类的普通成员函数地址是静态的,在编译阶段已经指定;(函数重载、函数模板);
动态多态:动态绑定,运行时去确定的对象类型及选择的函数;用于解决基类指针调用派生类中重写函数 问题;
2、基础的多态,编译器实现
基类base,派生类A、派生类B;
3、多重继承之后,多态出现的问题:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· AI与.NET技术实操系列(六):基于图像分类模型对图像进行分类