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

C++: Copy object data in member function of base class

本文关键字:对象 数据 函数 成员 复制 基类 C++      更新时间:2023-10-16

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

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

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

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

No. 这称为切片问题

即使您在AB中重载operator=也是如此:*this = *other只会解析为A::operator=(const A&)B::operator=(const A&)被调用。

No. this没有任何空间供子班成员使用。因此,派生类的成员将被切片。此问题称为 Object Slicing

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

不要将代码引入发生Object Slicing的情况。
如果您面临Object Slicing的问题,那么您的软件程序架构/设计不佳。当然,除非你为了权宜之计而牺牲了好的OOP设计。