Как объявить перегруженный оператор в абстрактном классе и переопределить его в производном неабстрактном классе?

Я пытаюсь написать абстрактный класс с некоторыми чисто виртуальными бинарными операторами, которые должны быть реализованы производным классом для достижения полиморфизма операторов. Вот'Это упрощенный пример:

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

Это неСейчас не имеет значения, что делает оператор, важная часть - это то, что он возвращает: он возвращает временный производный объект или ссылку на него. Теперь, если я пытаюсь скомпилировать, я получаю это:

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

Какие'S не так? Isn»t оператор + (единственная чисто виртуальная функция в Base) переопределяется? Почему Derived должен быть абстрактным?

Ответы на вопрос(2)

Ваш ответ на вопрос