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类型类

Python 输入 TypeVar(A, B, covariant=True) 是啥意思?

逆变(contravariant)与协变(covariant)