#include <stdio.h> class A{ public: A(){f();} virtual void f(){printf("in class A\n");} }; class B:public A{ public: void f(){printf("in class B\n");} }; B b;
调用的结果是什么?
你需要知道的是:
1、b.f()在C++里会转换成B::f(&b),
2、B b的过程是什么?
B先调用A的构造,A的构造先设置好的vptr = A::vtable
随后,B的构造再把A::vtable里面的有自己实现的项覆盖掉。
所以,这里还没有覆盖,f(&b)这时候,vtable里指向的是A::f(),于是。。