2011-05-11 121 views
6

假设我有两个类A和B. B从A派生。A没有数据成员,但B有两个整数成员。C++:在基类的成员函数中复制对象数据

如果我在类A定义的方法,如下所示:

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

,并调用它的子类,将整数数据成员被复制?

+0

我认为他们不会被复制,但我想听到正确的答案。 – 2011-05-11 17:07:39

回答

7

不可以。这被称为slicing problem

这是真实的,即使你在这两个AB超载operator=*this = *other将只解析为A::operator=(const A&)B::operator=(const A&)被调用。

+0

如何解决?在使用前投射它? – atoMerz 2011-05-11 17:07:27

+0

@AtoMerZ:这取决于你想要做什么。如果你遇到了一个情况,你有一个指向B的'A *',而你想'CopyFrom'和另一个'B',那么你可能做错了! – 2011-05-11 17:10:14

+1

@AtoMerZ:[这个答案](http://stackoverflow.com/questions/274626/what-is-the-slicing-problem-in-c/274977#274977)的链接问题给出了最好的解决方案。 – Johnsyweb 2011-05-11 17:14:24

3

this没有任何空间给子类的成员。所以Derived类的成员只会被切分。这个问题被称为Object Slicing

如何解决?
预防胜于治疗!

不要将您的代码引入到Object Slicing发生的情况。
如果您面临的问题是Object Slicing,那么您的建筑/设计软件程序设计不佳。除非因为权宜而牺牲良好的面向对象设计。