假设我有两个类A和B. B从A派生。A没有数据成员,但B有两个整数成员。C++:在基类的成员函数中复制对象数据
如果我在类A定义的方法,如下所示:
void CopyFrom(const A* other)
{
*this = *other;
}
,并调用它的子类,将整数数据成员被复制?
假设我有两个类A和B. B从A派生。A没有数据成员,但B有两个整数成员。C++:在基类的成员函数中复制对象数据
如果我在类A定义的方法,如下所示:
void CopyFrom(const A* other)
{
*this = *other;
}
,并调用它的子类,将整数数据成员被复制?
不可以。这被称为slicing problem。
这是真实的,即使你在这两个A
和B
超载operator=
:*this = *other
将只解析为A::operator=(const A&)
或B::operator=(const A&)
被调用。
如何解决?在使用前投射它? – atoMerz 2011-05-11 17:07:27
@AtoMerZ:这取决于你想要做什么。如果你遇到了一个情况,你有一个指向B的'A *',而你想'CopyFrom'和另一个'B',那么你可能做错了! – 2011-05-11 17:10:14
@AtoMerZ:[这个答案](http://stackoverflow.com/questions/274626/what-is-the-slicing-problem-in-c/274977#274977)的链接问题给出了最好的解决方案。 – Johnsyweb 2011-05-11 17:14:24
this
没有任何空间给子类的成员。所以Derived类的成员只会被切分。这个问题被称为Object Slicing
。
如何解决?
预防胜于治疗!
不要将您的代码引入到Object Slicing
发生的情况。
如果您面临的问题是Object Slicing
,那么您的建筑/设计软件程序设计不佳。除非因为权宜而牺牲良好的面向对象设计。
我认为他们不会被复制,但我想听到正确的答案。 – 2011-05-11 17:07:39