在C++的,動態綁定,考慮下面的例子中...機制而vptr和V表中C++
class Base
{
virtual void fun()
{
cout<<"Base";
}
};
class Derived : Base
{
void fun()
{
cout<<"Derived";
}
};
int main()
{
Base *bptr;
Derived d;
bptr=&d;
bptr->fun();
}
上述函數的輸出被「派生」由於虛擬關鍵字的聲明/動態捆綁。
根據我的理解,將創建一個虛擬表(Vtable),其中包含虛擬函數的地址。在這種情況下,爲派生類創建的虛擬表指向繼承的虛擬fun()
。並且bptr->fun()
將被解析爲bptr->vptr->fun();
。這指向了繼承的基類函數本身。我不完全清楚如何調用派生類函數?
注意它是'int main',而不是'void main',並且類聲明需要以';'結尾。 –
下面的答案看起來不錯,但如果你覺得有必要閱讀更多的主題,我建議[*在C++對象模型內*](http://www.amazon.com/Inside-Object-Model-Stanley -Lippman/dp/0201834545 /)(ISBN:978-0201834543)。 –