C ++中的上传和多态

时间:2014-11-30 21:25:37

标签: c++ polymorphism virtual-method

您能否帮我理解为什么我会得到以下输出?

  

ž

代码如下:

#include <iostream>
using namespace std;

class X {
public:
    virtual void shout() { cout << "X"; }
};

class Y : public X {
public:
    void shout() { cout << "Y"; }
};

class Z : public Y {
public:
    void shout() { cout << "Z"; }
};

int main() {

    Y *yz = new Z(); 

    yz -> shout();

    return 0;
}

2 个答案:

答案 0 :(得分:3)

由于shout被声明为virtual,因此C ++在调用时会执行dynamic dispatch,并使用Z的方法版本,因为{{ 1}}是对象的类型。

答案 1 :(得分:2)

因为这是你编程的。您声明shout()虚拟,这意味着如果是Z对象,则执行Z shout()。如果您没有明确重复virtual关键字,也会执行此操作。即即使您不在每个派生类中重复shout()(可选),virtual也会被视为虚拟。

无论如何我会重复virtual关键字,我也会使用override