c++多态由虚函数实现:子类覆盖父类的虚函数,然后声明一个指向子类对象的父类指针p,当用p调用虚函数时,调用的是子类的虚函数
这种机制内部由虚函数表实现
new一个对象时,只为类中成员变量分配空间,对象之间共享成员函数
包含虚函数的类才会有虚函数表,同属于一个类的对象共享虚函数表,但是有各自的指针_vptr指向虚表,虚表的实质是一个指针数组,里面存的是虚函数的函数指针
类对象的首地址就是_vptr指针的地址p_vptr,取p_vptr的值就是_vptr,也就是虚函数表的地址,通过函数地址就可以直接运行虚函数
多继承时,子类每有一个含有虚函数的父类,就有一个对应的虚表指针
网友评论