本文代码摘自 http://dwz.date/PST; 视频解析:十分钟带你搞明白虚函数、虚表、多态的原理以及多重继承带来的问题_哔哩哔哩_bilibili
1、多态:
基类指针只能调用基类的成员函数,不能调用派生类的成员函数;如果在基类的成员函数前加上virtual 关键字,把它声明为虚函数;基类指针就可以调用派生类的同名函数;通过派生类中的同名函数访问派生类的成员变量;有了虚函数,基类指针指向基类对象时,就使用基类的成员函数和数据,指向派生类的对象时,就使用派生类的成员函数和数据;基类指针表现出的多种形式,称为多态;
派生类重载时最好在参数列表后 加上 override 关键字,防止函数名写错;
基类的引用也可以使用多态;
如果基类中有虚函数,对象的内存模型中就会有一个虚函数表,表中存放了基类的函数名和地址;派生类中重定义了基类的虚函数,创建派生对象时,将用派生类的函数取代虚函数表中的基类的函数;
静态多态:类的普通成员函数地址是静态的,在编译阶段已经指定;(函数重载、函数模板);
动态多态:动态绑定,运行时去确定的对象类型及选择的函数;用于解决基类指针调用派生类中重写函数 问题;
2、基础的多态,编译器实现
基类base,派生类A、派生类B;
3、多重继承之后,多态出现的问题:
标签:多重,函数,成员,派生类,多态,基类,指针,底层 From: https://www.cnblogs.com/xuan01/p/17415805.html