返回派生类型时出现协变类型错误

Covariant type error when returning a derived type

本文关键字:类型 错误 派生 返回      更新时间:2023-10-16

>我正在尝试创建一个具有派生类型的基类;在基类中,我有一个纯虚拟方法,它返回 DtBase 类型(另一个类(的内容,并且在派生类中重写它时返回 DtDerived 类型(派生自 DtBase(的东西。 我收到一个错误,说返回的类型与覆盖的纯虚函数的类型不相同或协变。我不明白为什么会这样,DtBase 和 DtDerived 不是协变的吗?

下面是显示此错误的代码:

//DtBase.h
class DtBase{
public:
DtBase();
virtual ~DtBase();
};
class DtDerived: public DtBase{
public:
DtDerived();
~DtDerived();
};
//Base.h
#include "DtBase.h"
class base{
public:
base();
virtual DtBase foo()=0;
virtual ~base();
};
class derived: public base{
public:
derived();
DtDerived foo(); // This is where I get the error
~derived();
};

你需要在 DtDerived::foo(( 中返回一个 DtBase 指针 DtBase::foo(( 和 DtDerived 指针,否则 DtDerived 部分将被简单地切掉,调用者永远不会看到它实际上是一个返回的 DtDerived 。