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