多態的背後

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章