首页 >  聚焦 >  >  正文

多态、虚函数表、底层实现、多重继承的问题及处理-世界微资讯

2023-05-19 18:21:45 来源:博客园


【资料图】

本文代码摘自http://dwz.date/PST; 视频解析:十分钟带你搞明白虚函数、虚表、多态的原理以及多重继承带来的问题_哔哩哔哩_bilibili

1、多态:

基类指针只能调用基类的成员函数,不能调用派生类的成员函数;如果在基类的成员函数前加上virtual 关键字,把它声明为虚函数;基类指针就可以调用派生类的同名函数;通过派生类中的同名函数访问派生类的成员变量;有了虚函数,基类指针指向基类对象时,就使用基类的成员函数和数据,指向派生类的对象时,就使用派生类的成员函数和数据;基类指针表现出的多种形式,称为多态;

派生类重载时最好在参数列表后 加上 override 关键字,防止函数名写错;

基类的引用也可以使用多态;

如果基类中有虚函数,对象的内存模型中就会有一个虚函数表,表中存放了基类的函数名和地址;派生类中重定义了基类的虚函数,创建派生对象时,将用派生类的函数取代虚函数表中的基类的函数;

静态多态:类的普通成员函数地址是静态的,在编译阶段已经指定;(函数重载、函数模板);

动态多态:动态绑定,运行时去确定的对象类型及选择的函数;用于解决基类指针调用派生类中重写函数 问题;

2、基础的多态,编译器实现

基类base,派生类A、派生类B;

3、多重继承之后,多态出现的问题:

标签: