一.虚函数表介绍
Virtual Table虚函数表是实现多态的
每个有虚函数的类的实现,都有个指向虚函数的指针表(不管是父类还是子类)
指向虚表的指针是作为数据成员存在实例对象中
当调用虚函数时,就去查找对象的虚表中指向整顿派生类函数
虚函数表就是虚函数指针组成的一个数组
对于类的普通函数使用的是静态绑定,发生在编译期
对类的虚函数是动态绑定,发生在运行期
虚函数表的创建是在编译期完成
虚函数按照其声明的顺序放置在虚表中
虚表中 如果子类额外加了虚函数,父类的虚函数在子类的虚函数前面
虚表中,子类会覆盖父类的虚函数,子类没有覆盖的虚函数就沿用父类的
多重继承时,每个父类都有自己的虚函数表,子类的虚函数地址按照声明顺序放在第一个积累的虚表最后;
二.单向继承虚表模式
三.多重继承虚表模式
四.多重继承并有重写的
五.注意:
1.父类指针是不能调用子类中未覆盖父类的,而是自己新加的成员函数的行为都会被编译器视为非法;
2.如果父类的虚函数是private或是protected的,但这些非public的虚函数同样会存在于虚函数表中,所以事实上可以使用访问虚函数表的方式来访问这些non-public的虚函数,但这样又是不合理的。