【发布时间】:2020-03-03 10:00:26
【问题描述】:
对象切片在 C++ 中是如何工作的?
有人可以帮我理解对象切片是如何工作的吗?具体来说,我有 Class3 类,它公开继承 Class1 和 Class2 类,如下所示
class Class1
{
int a, b;
public:
Class1() : a(11), b(12){}
void get(){cout<<"\nget from Class1: this:"<<this;}
};
class Class2
{
int c, d;
public:
Class2() : c(13), d(14){}
void get(){cout<<"\nget from Class2: this:"<<this;}
};
class Class3 : public Class1, public Class2
{
public:
Class3(): Class1(), Class2(){};
void get(){cout<<"\nget from Class3: this:"<<this;}
};
int main()
{
Class3 obj;
Class1& c1ref = obj;
Class2& c2ref = obj;
c1ref.get();
c2ref.get();
return 0;
}
输出:
get from Class1: this:0x70d12c86dd30
get from Class2: this:0x70d12c86dd38
我的理解是当我们将 c1ref/c2ref 分配给 obj 时,它必须在内部进行一些计算,然后才能将值分配给 c1ref/c2ref。这些值是如何计算出来的?
【问题讨论】:
-
你在哪里看到切片?
-
如果你从
Class1& c1ref = ...中删除&,你会得到切片 -
不要以使现有答案无效的方式编辑您的问题。
标签: c++ object-slicing