【发布时间】:2019-01-01 05:25:24
【问题描述】:
我有很多类继承自一些Base。
在某个时候const 成员(非静态)被添加到Base 类。为了初始化它,我向Base 和孩子添加了构造函数。
但是(据我了解)此操作删除了默认赋值运算符。我需要这个操作员回来。 现在我需要为从“Base”继承的每个类添加自定义赋值运算符。 有很多课。解决这种情况的最简单方法是什么?
UPD:简单示例
class SerializationBase : {
const SerializationType type;
...
public:
SerializationType GetType() {return type;}
}
class SomeObject : public SerializationBase {
... // a lot of different fields
public:
SomeObject() : SerializationBase(SerializationType::SomeType);
}
class SomeAnotherObject : public SerializationBase {
... // a lot of different fields
public:
SomeAnotherObject() : SerializationBase(SerializationType::SomeAnotherType);
}
添加const SerializationType后不起作用的代码:
SomeObject some = Deserialize<SomeObject>(serializedData);
Deserialize 在哪里:
template <typename T>
T Deserialize(SerializedData);
我想要什么:让它发挥作用的最简单方法。 (也许是赋值运算符的一些类上下文无关的实现,我可以在每个类中复制粘贴)
【问题讨论】:
-
基础成员真的需要是 const 吗?如果确实如此,将一个碱基分配给另一个碱基意味着什么?
-
你能给我们一个minimal reproducible example吗?
-
谢谢。给我几分钟来简化代码。
-
定义
Base::operator=就足够了。有了这个,隐式定义的运算符应该适用于派生类。
标签: c++ operator-overloading assignment-operator