继承的一元运算符上无效的协变量返回类型

时间:2018-09-02 17:23:57

标签: c++ inheritance interface

我正在使用基类为具有某些可用操作的任何对象定义接口。当我实际实现派生类时,我的所有一元运算符(但不是二进制运算符)都会收到“无效的协变量返回类型”错误。这是相关代码:

class elem {
    public:
    virtual elem operator+(const elem &other) const = delete;
    virtual elem operator-() const = delete;
    virtual elem operator*(const elem &other) const = delete;
};

class specialElem : public elem {
    public:
    virtual specialElem operator+(const specialElem &other) const {
        //...
    }
    virtual specialElem operator-() const {
        //...
    }
    virtual specialElem operator*(const specialElem &other) const {
        //...
    }
};

我查找了此错误消息,答案是“将派生类用作返回类型(而不是基类)仅在按引用/指针而不按值返回时有效”。但是现在我不明白。如果是这样,为什么二元运算符可以工作,而一元运算符却不能工作?

奖金:当我们想按值返回时,实现接口的“普通C ++方式”是什么?

0 个答案:

没有答案