在C++中,进行动态绑定时,请考虑以下示例...
上述C++程序的输出由于virtual关键字/动态绑定的声明是“Derived”。
据我理解,将会创建一个虚拟表(Vtable),其中包含虚函数的地址。在这种情况下,派生类所创建的虚拟表指向了继承的虚拟
class Base
{
virtual void fun()
{
cout<<"Base";
}
};
class Derived : public Base
{
void fun()
{
cout<<"Derived";
}
};
int main()
{
Base *bptr;
Derived d;
bptr=&d;
bptr->fun();
return 0;
}
上述C++程序的输出由于virtual关键字/动态绑定的声明是“Derived”。
据我理解,将会创建一个虚拟表(Vtable),其中包含虚函数的地址。在这种情况下,派生类所创建的虚拟表指向了继承的虚拟
fun()
函数。并且bptr->fun()
将被解析为bptr->vptr->fun();
。这指向了继承的基类函数本身。我还不完全清楚如何调用派生类函数?