草庐IT

covariance

全部标签

java - Java中的协方差和重载

classA{booleanf(Aa){returntrue;}}classBextendsA{booleanf(Aa){returnfalse;}//overrideA.f(A)booleanf(Bb){returntrue;}//overloadA.f}voidf(){Aa=newA();Aab=newB();Bb=newB();ab.f(a);ab.f(ab);ab.f(b);//(1)false,false,*false*b.f(a);b.f(ab);b.f(b);//(2)false,false,true}你能解释一下第一行最后一个假输出,为什么不是真的吗?

C++:如何在不强制转换的情况下避免继承类中的 "invalid covariant return type"?

我有一个非常复杂的类层次结构,其中的类是相互依赖的交叉类:有两个抽象类A和C,它们分别包含一个返回C和A实例的方法。在他们继承的类中,我想使用协变类型,在这种情况下这是一个问题,因为我不知道一种方法来前向声明继承关系。我得到一个“test.cpp:22:error:invalidcovariantreturntypefor'virtualD*B::outC()'”-错误,因为编译器不知道D是C的子类。classC;classA{public:virtualC*outC()=0;};classC{public:virtualA*outA()=0;};classD;classB:publi

c++ - 将 vector<Derived*> 放入需要 vector<Base*> 的函数中

考虑这些类。classBase{...};classDerived:publicBase{...};这个函数voidBaseFoo(std::vectorvec){...}最后是我的vectorstd::vectorderived;我想通过derived发挥作用BaseFoo,但编译器不让我。我如何解决这个问题,而不将整个vector复制到std::vector? 最佳答案 vector和vector是不相关的类型,所以你不能这样做。这在C++FAQhere中有解释。.您需要将变量从vector更改为到vector并插入Derive

c++ - 将 vector<Derived*> 放入需要 vector<Base*> 的函数中

考虑这些类。classBase{...};classDerived:publicBase{...};这个函数voidBaseFoo(std::vectorvec){...}最后是我的vectorstd::vectorderived;我想通过derived发挥作用BaseFoo,但编译器不让我。我如何解决这个问题,而不将整个vector复制到std::vector? 最佳答案 vector和vector是不相关的类型,所以你不能这样做。这在C++FAQhere中有解释。.您需要将变量从vector更改为到vector并插入Derive

c++ - C++ 协方差何时是最佳解决方案?

Thisquestion几个小时前被问到这里,让我意识到我从未在自己的代码中真正使用过协变返回类型。对于那些不确定协方差是什么,它允许(通常)虚拟的返回类型如果类型是相同继承的一部分,则功能不同等级制度。例如:structA{virtual~A();virtualA*f();...};structB:publicA{virtualB*f();...};两个f()函数的不同返回类型被称为协变的。旧版本的C++要求返回类型相同,因此B必须如下所示:structB:publicA{virtualA*f();...};所以,我的问题是:有没有人有一个现实世界的例子,其中需要协变返回类型的虚函数

c++ - C++ 协方差何时是最佳解决方案?

Thisquestion几个小时前被问到这里,让我意识到我从未在自己的代码中真正使用过协变返回类型。对于那些不确定协方差是什么,它允许(通常)虚拟的返回类型如果类型是相同继承的一部分,则功能不同等级制度。例如:structA{virtual~A();virtualA*f();...};structB:publicA{virtualB*f();...};两个f()函数的不同返回类型被称为协变的。旧版本的C++要求返回类型相同,因此B必须如下所示:structB:publicA{virtualA*f();...};所以,我的问题是:有没有人有一个现实世界的例子,其中需要协变返回类型的虚函数

java - 用简单的英语解释协变、不变和逆变?

今天,我阅读了一些关于Java中的协变、逆变(和不变性)的文章。我阅读了英文和德文Wikipedia文章,以及IBM的其他一些博客文章和文章。但我仍然对这些到底是什么感到有些困惑?有人说是关于类型和子类型之间的关系,有人说是关于类型转换,有人说它是用来决定一个方法是被覆盖还是被重载。所以我正在寻找简单的英语解释,向初学者展示协方差和逆变(和不变性)是什么。加分是一个简单的例子。 最佳答案 Somesayitisaboutrelationshipbetweentypesandsubtypes,othersayitisabouttype

java - 用简单的英语解释协变、不变和逆变?

今天,我阅读了一些关于Java中的协变、逆变(和不变性)的文章。我阅读了英文和德文Wikipedia文章,以及IBM的其他一些博客文章和文章。但我仍然对这些到底是什么感到有些困惑?有人说是关于类型和子类型之间的关系,有人说是关于类型转换,有人说它是用来决定一个方法是被覆盖还是被重载。所以我正在寻找简单的英语解释,向初学者展示协方差和逆变(和不变性)是什么。加分是一个简单的例子。 最佳答案 Somesayitisaboutrelationshipbetweentypesandsubtypes,othersayitisabouttype