【问题标题】:Upcasting and polymorphism in C++C++ 中的向上转型和多态性
【发布时间】:2014-11-30 21:25:36
【问题描述】:

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

Z

代码如下:

#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;
}

【问题讨论】:

  • 因为shout 被声明为virtual

标签: c++ polymorphism virtual-functions


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    因为这是你编程的。您声明了shout() virtual,这意味着在 Z 对象的情况下,将执行 Z 的 shout()。如果您不明确重复 virtual 关键字,也会这样做。 IE。 shout() 被认为是虚拟的,即使您不在每个派生类中重复 virtual(这是可选的)。

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

    【讨论】:

    • 是不是说一提到virtual就在每个类中变成virtual?
    • 是的。在每个派生类中。
    猜你喜欢
    • 2016-05-08
    • 1970-01-01
    • 2021-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多