什么是C ++或Java中的对象切片?

对象切片用于描述将派生类的对象分配给基类的实例时的情况。这会导致派生类对象的方法和成员变量丢失。这被称为信息被切掉。例如,

class Foo {
   int a;
};
   class Bar : public Foo {
   int b;
};

由于Bar扩展了Foo,因此它现在具有2个成员变量a和b。因此,如果创建Bar类型的变量bar,然后创建Foo类型的变量并分配bar,则在此过程中将丢失成员变量b。例如,

Bar bar;
Foo foo = bar;

在这种情况下,关于b的信息in会丢失在一个条中。这称为成员切片。