假设我有两个类A,而B. B.从A派生.A没有数据成员,但B有两个整数成员。
如果我在A类中定义一个方法,如下所示:
void CopyFrom( const A* other )
{
*this = *other;
}
并在子类中调用它,整数数据成员是否会被复制?
答案 0 :(得分:7)
没有。这称为slicing problem。
即使您在operator=
和A
中重载B
也是如此:*this = *other
只会解析为A::operator=(const A&)
或B::operator=(const A&)
被召唤。
答案 1 :(得分:3)
没有。 this
没有为子类成员提供任何空间。因此Derived类的成员将被切片。此问题称为Object Slicing
。
如何解决?
预防胜于治疗!
不要将您的代码介绍给发生Object Slicing
的情况
如果您遇到Object Slicing
问题,那么您的架构/设计软件程序设计不佳。除非,当然你牺牲了良好的OOP设计而不是权宜之计。