我听说很多时候虚拟功能通常是用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