C++虚函数表解析
单继承
无虚函数覆盖:
-
虚函数按照其声明顺序放于表中。
-
父类的虚函数在子类的虚函数前面。
有虚函数覆盖:
-
覆盖的f()函数被放到了虚表中原来父类虚函数的位置。
-
没有被覆盖的函数依旧。
多继承
无虚函数覆盖:
-
每个父类都有自己的虚表。
-
子类的成员函数被放到了第一个父类的表中。(所谓的第一个父类是按照声明顺序来判断的)
有虚函数覆盖:
- 父类虚函数表中的f()的位置被替换成了子类的函数指针。这样,我们就可以任一静态类型的父类来指向子类,并调用子类的f()了