Wie deklariere ich einen überladenen Operator in einer abstrakten Klasse und überschreibe ihn in einer abgeleiteten nicht abstrakten Klasse?

Ich versuche, eine abstrakte Klasse mit einigen reinen virtuellen Binäroperatoren zu schreiben, die von der abgeleiteten Klasse implementiert werden sollten, um Operatorpolymorphismus zu erreichen. Hier ist ein vereinfachtes Beispiel:

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();
}

Im Moment spielt es keine Rolle, was der Operator tut, der wichtige Teil ist, was er zurückgibt: Er gibt ein temporäres abgeleitetes Objekt oder einen Verweis darauf zurück. Wenn ich jetzt versuche zu kompilieren, erhalte ich Folgendes:

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

Was ist falsch? Wird Operator + (die einzige rein virtuelle Funktion in Base) nicht überschrieben? Warum sollte Derived auch abstrakt sein?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage