我聽說很多時候虛擬功能通常是用vtable實現的。但我其實並不知道它是如何實現的以及它是如何工作的。虛擬關鍵字內部組件
編輯
我實際上並沒有得到這個代碼:怎麼會被改寫。有人可以詳細解釋這一點嗎?
最後,讓我們看看編譯器如何實現對虛函數的調用。您的代碼可能是這樣的:
// Your original C++ code
void mycode(Base* p)
{
p->virt3();
}
編譯器不知道這是否會調用Base::virt3()
或Der::virt3()
或者是另一個派生類甚至不存在尚未的virt3()
方法。它只知道你正在呼叫virt3()
,這正好是v表中第3槽的功能。它改寫這一呼籲弄成這個樣子:
// Pseudo-code that the compiler generates from your C++
void mycode(Base* p)
{
p->__vptr[3](p);
}
http://en.wikipedia.org/wiki/Vtable – Potatoswatter 2010-09-11 12:51:29