#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(),於是。。