C 虚函数中的协变返回类型
在 C 中,继承的类可以实现具有不同返回类型的虚函数。但是,这些返回类型必须与原始返回类型协变。
协变意味着派生类中的返回类型至少与基类中的返回类型一样派生。例如,如果基类函数返回 Base 指针,则派生类函数可以返回 Derived 指针。
这是允许的,因为任何指向派生类对象的指针都可以隐式转换为指向基类的指针目的。因此,对基类中的虚函数的调用始终可以返回指向基类对象的指针,即使派生类实现返回指向派生类对象的指针也是如此。
请考虑以下示例:
class Base { public: virtual ~Base() {} virtual Base* clone() const = 0; }; class Derived: public Base { public: virtual Derived* clone() const { return new Derived(*this); } };
在此示例中,Base 类定义了一个返回 Base 指针的纯虚函数克隆。在 Derived 类中,克隆函数被重写以返回 Derived 指针。这是允许的,因为 Derived 是 Base 的派生类,并且 Derived 指针可以隐式转换为 Base 指针。
以上是C 虚拟函数何时可以具有协变返回类型?的详细内容。更多信息请关注PHP中文网其他相关文章!