C ++我能正确理解多态吗?
|
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()的覆盖,会发生什么?最后,为避免为基类实现函数但仍允许多态,您是否只是编写一个空函数体并将其声明为虚函数?谢谢。
没有找到相关结果
已邀请:
5 个回复
寇剩
如果现在创建这样的指针:
您会遇到一个不错的编译器错误,因为无法将compiler3 get转换为
。 :) 所以只有
和
,而不是
。 接下来,当
是
指针时,它将仅调用
函数(如果提供)。 最后,要强制子类实现某个功能,请声明为“ 11”,如下所示:
现在,子类(在这种情况下为
和
)必须实现
,否则它们将无法编译。
陷牡彭拈峰
泉秘胁
惜堡沁戚
和酒吧这样
然后
将调用Foo :: func()。 如果你这样宣布富
然后
将调用Bar :: func()。
凄挡
。任何 打算实例化的类 变成一个对象,将其覆盖 发挥作用并给它一个适当的 实施。