Неверный ковариантный тип возвращаемого значения на унаследованном унарном операторе - PullRequest
0 голосов
/ 02 сентября 2018

Я использую базовый класс для определения интерфейса для любого объекта с определенными доступными операциями. Когда я на самом деле реализую производный класс, я получаю ошибки «недопустимый ковариантный тип возврата» во всех моих унарных операторах (но не в моих бинарных операторах). Вот соответствующий код:

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 ++" реализации интерфейса, когда мы хотим вернуть по значению?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...