【发布时间】:2011-08-05 15:54:06
【问题描述】:
Bar 和 Box 是 Foo 的派生类,Foo 具有虚函数 F(),Bar 和 Box 都具有函数 F()。据我了解,多态性正确地允许 Bar.F() 而不是 Box.F() 或 Box.F() 而不是 Bar.F() 使用一些运行时例程覆盖 Foo.F() 而不知道您的对象是否是一个酒吧或一个盒子。是这样的:
Foo * boxxy = new Box;
boxxy->F();
最后一行将调用正确的 F()(在本例中为 Box.F()),与 boxxy 是 Box 还是 Bar 或 Foo 无关(在这种情况下,虚拟 Foo.F( ) 被调用)。
我理解对了吗?如果 boxxy 是 Box 指针,会发生什么变化?如果派生类没有覆盖 F() 会发生什么?最后,为了避免为基类实现一个函数但仍然允许多态性,你是否只是编写一个空函数体并将其声明为虚拟?谢谢。
【问题讨论】:
标签: c++ polymorphism derived-class overriding