C ++:在基类的成员函数中复制对象数据

时间:2011-05-11 17:02:12

标签: c++ oop

假设我有两个类A,而B. B.从A派生.A没有数据成员,但B有两个整数成员。

如果我在A类中定义一个方法,如下所示:

void CopyFrom( const A* other )
{
    *this = *other;
}

并在子类中调用它,整数数据成员是否会被复制?

2 个答案:

答案 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设计而不是权宜之计。