【发布时间】:2018-11-14 06:47:26
【问题描述】:
假设我有两节课
class Bar{
public:
Bar()
~Bar()
}
class Foo:public Bar{
Foo()
~Foo
}
现在,如果我想执行以下操作:
int main(){
Bar * obj = new Foo();
Foo * obj2 = dynamic_cast<Foo*>(obj);
return 0;
}
我收到一个错误,因为它不是多态的,所以我无法动态转换它。我知道这是因为我的基类中的任何地方都没有 virtual 关键字(在我的情况下,一个好的情况是在析构函数中)。但是为什么我需要这个虚拟关键字才能拥有这种真正的多态性呢?如果我试图调用一个显示函数,我理解它,编译器/在运行时发生的任何事情都需要弄清楚要调用哪个显示。但我不确定为什么这里需要它。我想要一个解释。
谢谢
【问题讨论】:
-
我怀疑你想要另一个答案,而不是“因为语言是这样设计的”?
-
如何编写一个非动态绑定的函数?需要有一种方法来区分多态函数和沼泽标准、普通函数、永远不会被覆盖的普通函数。
-
哈,如果可以的话。通常语言都是以特定的方式设计的,对吧?一定是有原因的:P
标签: c++ polymorphism