我有以下代码返回" YXX"。
我想知道为什么第二张印刷品显示出' X'而关键词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
答案 0 :(得分:2)
选项卡是一个X对象的数组,因此当您将Y对象分配给选项卡的元素时,它会切掉Y部分,而您只剩下X部分。
现在,如果您将其更改为:
X * tab[2];
tab[0] = new X;
tab[1] = new Y;
print(*tab[0]);
print(*tab[1]);
它不会进行任何切片,它会打印XY