这里是从Wikipedia页面(https://en.wikipedia.org/wiki/Object_slicing)进行对象切片的示例。是否可以逐行解释代码? (就像这个答案https://stackoverflow.com/a/18103471/6359659)
struct A
{
A(int a) : a_var(a) {}
int a_var;
};
struct B : public A
{
B(int a, int b) : A(a), b_var(b) {}
int b_var;
};
B &getB()
{
static B b(1, 2);
return b;
}
int main()
{
// Normal assignment by value to a
A a(3);
//a.a_var ==3
a = getB();
// a.a_var == 1, b.b_var not copied to a
B b2(3, 4);
//b2.a_var==3 ,b2.b_var==4
A &a2 = b2;
// Partial assignment by value through reference to b2
a2 = getB();
// b2.a_var == 1, b2.b_var == 4!
return 0;
}