【发布时间】:2013-10-13 23:37:30
【问题描述】:
在 C++ 中,在动态绑定期间,请考虑以下示例...
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();
}
由于声明了虚拟关键字/动态绑定,上述函数的输出为“Derived”。
根据我的理解,将创建一个包含虚拟函数地址的虚拟表 (Vtable)。在这种情况下,为派生类创建的虚拟表指向继承的虚拟fun()。而bptr->fun() 将被解析为bptr->vptr->fun();。这指向继承的基类函数本身。派生类函数是怎么调用的,我不是很清楚?
【问题讨论】:
-
请注意,它是
int main,而不是void main,并且类声明需要以;结尾。 -
下面的答案看起来不错,但如果您觉得需要阅读更多有关该主题的内容,我建议您 Inside the C++ Object Model(ISBN:978-0201834543)。
标签: c++ virtual-functions dynamic-binding