Covariant Returen Types(协变返回类型)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Covariant Returen Types(协变返回类型)相关的知识,希望对你有一定的参考价值。
基类virtual func返回类型为某个类(class Super)的ptr或ref,子类重写的virtual func返回类型可改为该类子类(class Sub : public Super)的ptr或ref。
class Base { public: virtual Base* clone() const { return new Base(*this); } virtual ~Base() {} }; class Derived : public Base { public: virtual Base* clone() const { return new Derived(*this); } virtual ~Derived() {} }; int main() { Derived d; Base* bPtr = d.clone(); Derived* dPtr = dynamic_cast<Derived*>(bPtr); if(!dPtr) { delete dPtr; dPtr = nullptr; // throw exception ... } return 0; }
改为:
......
class Derived : public Base { public: virtual Derived* clone() const { return new Derived(*this); } virtual ~Derived() {} }; int main() { Derived d; Derived* dPtr = d.clone(); return 0; }
class Cherry {}; class BingCherry : public Cherry {}; class CherryTree { public: virtual Cherry* pick() const { return new Cherry(); } }; class BingCherryTree : public CherryTree { public: virtual BingCherry* pick() const { return new BingCherry(); } };
以上是关于Covariant Returen Types(协变返回类型)的主要内容,如果未能解决你的问题,请参考以下文章
[JAVA冷知识]什么是逆变(contravariant)与协变(covariant)?数组是否支持协变&逆变?泛型呢?
[JAVA冷知识]什么是逆变(contravariant)与协变(covariant)?数组是否支持协变&逆变?泛型呢?
Bi的名称 - 具有一个逆变量和一个协变参数的Functor类型类