解释一下虚函数,虚继承内部怎么实现的
简而言之,虚函数就是用基类类型的指针指向子类对象的实例,通过基类指针调用子类的成员函数。每个含有虚函数的类中都有一个虚函数表和指向虚函数表的虚函数指针,虚函数表中存放了类中各个虚函数的入口地址。
虚继承:
从不同途径继承的同一基类,会在子类中存在多份拷贝。即浪费资源又会存在二义性。
虚继承通过虚基类指针和虚基类表实现,每个虚继承的子类都有一个虚基类指针和虚基类表。当虚继承的子类被当做父类,虚基类的指针也会被继承。虚基类指针指向虚基类表,虚基类表中记录了虚基类与本类的偏移地址,通过这种方式找到虚基类成员。这样就不会导致像普通多重继承那样存在多份拷贝,节省了内存空间。
多态:一个接口,多种方法。多态分为静态多态和动态多态。静态多态主要是重载,在程序编译的时候就已经确定了调用哪个函数。动态多态是用虚函数机制实现的,在运行期间才确定调用哪个函数。