最新要闻

广告

手机

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案

家电

多态、虚函数表、底层实现、多重继承的问题及处理

来源:博客园


(资料图)

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

1、多态:

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

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

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

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

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

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

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

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

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

关键词: