C++:复制基类成员函数中的对象数据
C++: Copy object data in member function of base class
>假设我有两个类A,B.B派生自A。A 没有数据成员,但 B 有两个整数成员。
如果我在类 A 中定义一个方法,如下所示:
void CopyFrom( const A* other )
{
*this = *other;
}
并在子类中调用它,整数数据成员会被复制吗?
No. 这称为切片问题。
即使您在A
和B
中重载operator=
也是如此:*this = *other
只会解析为A::operator=(const A&)
或B::operator=(const A&)
被调用。
No. this
没有任何空间供子班成员使用。因此,派生类的成员将被切片。此问题称为 Object Slicing
。
如何解决?
预防胜于治疗!
不要将代码引入发生Object Slicing
的情况。
如果您面临Object Slicing
的问题,那么您的软件程序架构/设计不佳。当然,除非你为了权宜之计而牺牲了好的OOP设计。
相关文章:
- 使用指针访问数组中的对象数据成员
- 如果在 C++ 构造函数中以错误的顺序初始化对象数据,会发生什么类型的错误
- 只需调用对象即可获取对象数据
- 从R中访问C 对象数据成员
- C 如何将对象数据传递到用户定义的转换操作员中
- 通用B树,用于存储自定义对象/数据类型
- 通过指向对象数据成员的指针更改该对象的值
- C .更改对象数据成员的数据成员
- 排序类对象数据成员从大到小
- 从程序集中调用的C++方法返回对象数据
- 如何设置对象数据成员与这个c++与这个
- 访问私有对象数据时出现问题
- 流操作,用于以不同格式输出对象数据
- 更新标准::映射对象数据
- C++是保证在基本对象std::swap之后有效的派生对象数据
- 添加类的对象数据
- 将对象/数据从库传递到控制台应用程序(如何)
- 将一个对象数据复制到另一个相同类型 C++ 的对象
- 用c++将对象数据写入txt文件
- c++继承.更改对象数据类型