我需要赋值运算符

时间:2018-07-24 14:27:05

标签: c++ operator-overloading assignment-operator

我有很多类都继承自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);

我想要的是:使它工作的最简单方法。 (也许是赋值运算符的某些类上下文无关的实现,我可以在每个类中复制粘贴)

1 个答案:

答案 0 :(得分:4)

问题在于,要实现默认的赋值运算符,您需要处理const成员。

为您提供3种选择:

  1. 在基类中实现您自己的赋值运算符。您将必须弄清楚该成员的处理方法,因为您将无法更改其值。其他所有类将自动依赖您的自定义赋值运算符,并应为其生成默认赋值运算符。
  2. 从成员中删除const。现在,默认分配应该可以正常工作,并被所有其他类自动继承。
  3. 将您的班级分为可分配基础和不可分配基础。不可分配的基础将只有const成员,并从可分配的成员继承。现在,您需要四处移动并将类更改为从适当的基本版本继承。

我会选择第一个选项,但是我不知道该const成员的详细信息。