Jak zadeklarować przeciążony operator w klasie abstrakcyjnej i przesłonić go w pochodnej klasie innej niż abstrakcyjna?

Próbuję napisać klasę abstrakcyjną z kilkoma czystymi wirtualnymi operatorami binarnymi, które powinny być zaimplementowane przez klasę pochodną w celu osiągnięcia polimorfizmu operatora. Oto uproszczony przykład:

class Base {
public:
    virtual const Base& operator+ (const Base&) const = 0;
};

class Derived : public Base {
public:
    const Derived& operator+ (const Derived&) const;
};

const Derived& Derived::operator+ (const Derived& rvalue) const {
    return Derived();
}

Teraz nie ma znaczenia, co robi operator, ważną częścią jest to, co zwraca: zwraca tymczasowy obiekt pochodny lub odwołanie do niego. Jeśli spróbuję się skompilować, otrzymam to:

test.cpp: In member function ‘virtual const Derived& Derived::operator+(const Derived&) const’:
test.cpp:12:17: error: cannot allocate an object of abstract type ‘Derived’
test.cpp:6:7: note:   because the following virtual functions are pure within ‘Derived’:
test.cpp:3:22: note:    virtual const Base& Base::operator+(const Base&) const

Co jest nie tak? Czy operator + (jedyna czysta funkcja wirtualna w Base) nie jest nadpisywany? Dlaczego Derived ma być również abstrakcyjne?

questionAnswers(2)

yourAnswerToTheQuestion