您能否帮我理解为什么我会得到以下输出?
ž
代码如下:
#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;
}
答案 0 :(得分:3)
由于shout
被声明为virtual
,因此C ++在调用时会执行dynamic dispatch,并使用Z
的方法版本,因为{{ 1}}是对象的类型。
答案 1 :(得分:2)
因为这是你编程的。您声明shout()
虚拟,这意味着如果是Z对象,则执行Z shout()
。如果您没有明确重复virtual
关键字,也会执行此操作。即即使您不在每个派生类中重复shout()
(可选),virtual
也会被视为虚拟。
无论如何我会重复virtual
关键字,我也会使用override
。