如果不使用“ virtual”关键字,为什么动态绑定不起作用?

时间:2018-11-14 06:47:27

标签: c++ polymorphism

说我有两节课

NULL

现在,如果我想执行以下操作:

class Bar{
    public:
    Bar()
    ~Bar()
}
class Foo:public Bar{
    Foo()
    ~Foo
}

我收到一个错误,因为它不是多态的,所以无法对其进行动态转换。我知道这是因为在基类中的任何地方都没有虚拟关键字(在我的情况下,析构函数会是一个很好的情况)。但是,为什么我需要这个虚拟关键字才能具有这种真正的多态性?如果我尝试调用一个显示函数,例如在运行时编译器/无论运行什么,都需要弄清楚要调用哪个显示,我就可以理解。但是我不确定为什么在这里需要它。我很想解释。

谢谢

1 个答案:

答案 0 :(得分:1)

C ++的设计原理是您不用为不使用的东西付费。

dynamic_cast实际上要求类是多态的。我相信这个概念已经存在于标准中。

当类是多态的时,该类的每个对象实际上都包含有关该对象类型的其他信息(直接或间接)。这会增加对象的大小。编译器不会自动插入此信息,而是仅当您将成员设为虚拟时才插入。

请参阅以下问题的答案:C++: Why does a struct\class need a virtual method in order to be polymorphic?