前提:存在多态性(虚函数)
版本1
1、每个类都会维持一份虚表(该表存的是虚函数的入口地址)
2、每个类产生一个对象时,都会产生一个虚指针,该指针指向对应类的虚表
3、当基类指针指向派生类对象,调用相关操作时:
基类指针首先指向派生类对象虚指针(派生类对象虚指针当然是指向派生类对象虚表了),通过该指针遍历虚表,
若匹配,则执行该操作(即派生类函数),若无(不匹配,相关操作对应的函数为非虚函数,虚表本来就是存放虚函数地址的),则基类指针就指向基类的虚函数表直接遍历,执行操作。
版本2
1、每个类都会维持一份虚表(该表存的是虚函数的入口地址)
2、每个类也会维持一个虚指针(我想应该是静态的),该指针指向对应类的虚表
3、当基类指针指向派生类对象,调用相关操作时:
基类指针首先指向派生类对象虚指针(派生类对象虚指针当然是指向派生类对象虚表了),通过该指针遍历虚表,
若匹配,则执行该操作(即派生类函数),若无,则基类指针就指向基类的虚指针,通过该指针遍历虚表,执行操作。
注意:
虚指针是属于类的还是伴随着对象的产生而产生?