说我有两节课
NULL
现在,如果我想执行以下操作:
class Bar{
public:
Bar()
~Bar()
}
class Foo:public Bar{
Foo()
~Foo
}
我收到一个错误,因为它不是多态的,所以无法对其进行动态转换。我知道这是因为在基类中的任何地方都没有虚拟关键字(在我的情况下,析构函数会是一个很好的情况)。但是,为什么我需要这个虚拟关键字才能具有这种真正的多态性?如果我尝试调用一个显示函数,例如在运行时编译器/无论运行什么,都需要弄清楚要调用哪个显示,我就可以理解。但是我不确定为什么在这里需要它。我很想解释。
谢谢
答案 0 :(得分:1)
C ++的设计原理是您不用为不使用的东西付费。
dynamic_cast实际上要求类是多态的。我相信这个概念已经存在于标准中。
当类是多态的时,该类的每个对象实际上都包含有关该对象类型的其他信息(直接或间接)。这会增加对象的大小。编译器不会自动插入此信息,而是仅当您将成员设为虚拟时才插入。
请参阅以下问题的答案:C++: Why does a struct\class need a virtual method in order to be polymorphic?