所有:繼承類結構是什麼樣的?
當我在C++中研究基因多態性,我發現一個小例子在這裏:
#include <iostream>
using namespace std;
class Base{
public:
virtual void f(float x){cout<<"Base::f(float)"<<x<<endl;}
void g(float x){cout<<"Base::g(float)"<<x<<endl;}
void h(float x){cout<<"Base::h(float)"<<x<<endl;}
};
class Derived:public Base{
public:
virtual void f(float x){cout<<"Derived::f(float)"<<x<<endl;}
void g(int x){cout<<"Derived::g(int)"<<x<<endl;}
void h(float x){cout<<"Derived::h(float)"<<x<<endl;}
};
int main(void){
Derived d;
Base *pb=&d;
Derived *pd=&d;
//Good:behavior depends solely on type of the object
pb->f(3.14f); //Derived::f(float)3.14
pd->f(3.14f); //Derived::f(float)3.14
//Bad:behavior depends on type of the pointer
pb->g(3.14f); //Base::g(float)3.14
pd->g(3.14f); //Derived::g(int)3(surprise!)
//Bad:behavior depends on type of the pointer
pb->h(3.14f); //Base::h(float)3.14(surprise!)
pd->h(3.14f); //Derived::h(float)3.14
return 0;
}
研究虛擬功能後,我覺得我有這個想法是如何的多晶型的工作,但仍存在一些在這段代碼中,我不想打擾某人解釋代碼是如何工作的,我只需要能夠向我展示Derived類中的詳細信息的人(不需要太多細節,只顯示方法函數指針(或索引)如何排列在Vtable和結構中對於那些沒有虛擬繼承的)。
從PB-> H(3.14f); //Base::h(float)3.14(surprise!) 我想應該有幾個vtables,對嗎?
謝謝!
你是對的。這些函數應該是'virtual',它將爲每個類的類型提供一個vtable。 – 2013-04-26 19:08:06
對不起德魯,這是我可憐的英語!這是工作代碼,我只想知道一些關於Derived Class結構的內部細節? – Kuan 2013-04-26 19:23:16