c++温故知新2(虚函数表)

2018-07-13  本文已影响10人  李相赫的乐芙兰

c++多态由虚函数实现:子类覆盖父类的虚函数,然后声明一个指向子类对象的父类指针p,当用p调用虚函数时,调用的是子类的虚函数

这种机制内部由虚函数表实现

new一个对象时,只为类中成员变量分配空间,对象之间共享成员函数

包含虚函数的类才会有虚函数表,同属于一个类的对象共享虚函数表,但是有各自的指针_vptr指向虚表,虚表的实质是一个指针数组,里面存的是虚函数的函数指针

类对象的首地址就是_vptr指针的地址p_vptr,取p_vptr的值就是_vptr,也就是虚函数表的地址,通过函数地址就可以直接运行虚函数

多继承时,子类每有一个含有虚函数的父类,就有一个对应的虚表指针

上一篇下一篇

猜你喜欢

热点阅读