【C++】多态深入分析
目录
一,多态的原理
1,虚函数表与虚函数表指针
2,原理调用
3,动态绑定与静态绑定
二,抽象类
三,单继承和多继承关系的虚函数表
1,单继承中的虚函数表
2,多继承中的虚函数表
3,菱形继承、菱形虚拟继承
四,继承和多态常见的经典题型
1,概念逻辑考察
2,问答题
一,多态的原理
1,虚函数表与虚函数表指针
虚函数表:存放虚函数指针的表,简称虚表。 虚函数表指针:指向虚函数表的指针。
一个含有虚函数的类中,至少都有一个虚函数表指针__vfptr,因为虚函数的地址要被放到虚函数表中,而虚函数表本质是一个存虚函数指针的指针数组,一般情况这个数组最后面放了一个nullptr。
派生类的虚表生成一共有以下步骤:a.先将基类中的虚表内容拷贝一份到派生类虚表中 b.如果派生类重写了基类中某个虚函数,用派生类自己的虚函数覆盖虚表中基类的虚函数 c.派生类自己新增加的虚函数按其在派生类中的声明次序增加到派生类虚表的最后(注意:在vs监视窗口下可能在虚表中看不到新增的虚函数,但是通过内存窗口下可以观察到)。
#include
using namespace std;
class Base
{
public:
virtual void Fun1() { //虚函数,地址存放到虚表中
cout
文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。