class A
{
virtual A operator+(const A &) const;
};
class B : public A
{
virtual B operator+(const A &) const;
};
Перегрузка оператора
Хочу скомпилить подобный код (gcc):
Код:
Получаю:
Код:
ошибка: некорректный ковариантный тип результата для ‘virtual B B::operator+(const A &) const’
ошибка: отменяющий ‘virtual A A::operator+(const A &) const’
ошибка: отменяющий ‘virtual A A::operator+(const A &) const’
Как быть?
ну, наверное, не следует этого делать! можешь конечно возвращать результатом сложения указатель на базовый класс, но это не очень красиво. так что лучше не используй виртуальность, а просто перегрузи необходимые операторы ручками.
Чтобы ваш оператор в классе B соотносился с соотв. оператором из класса A, возвращаемые типы должны быть одинаковы.