Я реализую наследование с помощью языка PIMPL. У меня есть два класса, таких как:
// In Base.h
class Base
{
virtual BaseImpl& getImpl() const;
private:
std::unique_ptr<BaseImpl> _pImpl;
};
// In Derived.h
class Derived : public Base
{
DerivedImpl& getImpl() const /* override */;
};
// In BaseImpl.h
class BaseImpl { ... };
// In DerivedImpl.h
class DerivedImpl : public BaseImpl { ... };
Теперь, если я раскомментирую ключевое слово override
выше, компилятор жалуется, что ковариантный тип возвращаемого значения недопустим при переопределении getImpl()
.
, поскольку DerivedImpl
происходит от BaseImpl
, и я возвращаю ссылки, где здесь проблема с ковариацией?
ПРИМЕЧАНИЕ : этот образец кода добровольно не отсортирован, классы находятся в независимых файлах. Проблема только в ключевом слове override
. Код компилируется без него.