使用虚方法的具体情况

时间:2017-12-19 18:07:09

标签: c++ virtual-functions

我有以下代码返回&#34; YXX&#34;。 我想知道为什么第二张印刷品显示出&#39; X&#39;而关键词tab[0] = y1在类X中使用。因此,行#include <iostream> class X { public: virtual void f() const { std::cout << "X"; } }; class Y : public X { void f() const { std::cout << "Y"; } }; void print(const X &x) { x.f(); } int main() { X tab[2]; Y y1; tab[0] = y1; print(y1); print(tab[0]); print(tab[1]); std::cout << std::endl; } 将tab [0]设置为Y对象,并显示&#39; Y&#39;由于虚拟方法不是吗?

VIPER

1 个答案:

答案 0 :(得分:2)

选项卡是一个X对象的数组,因此当您将Y对象分配给选项卡的元素时,它会切掉Y部分,而您只剩下X部分。

现在,如果您将其更改为:

X * tab[2];
tab[0] = new X;
tab[1] = new Y;
print(*tab[0]);
print(*tab[1]);

它不会进行任何切片,它会打印XY