这个问题 https://stackoverflow.com/questions/1259272/is-there-a-way-to-forward-declare-covariance几个小时前被问到这里,让我意识到
我从未在自己的代码中实际使用过协变返回类型。对于那些
不确定协方差是什么,它允许(通常)虚拟的返回类型
如果类型是同一继承的一部分,则函数会有所不同
等级制度。例如:
struct A {
virtual ~A();
virtual A * f();
...
};
struct B : public A {
virtual B * f();
...
};
两个 f() 函数的不同返回类型被称为协变。旧版本的 C++ 要求返回类型相同,因此 B 必须如下所示:
struct B : public A {
virtual A * f();
...
};
所以,我的问题是:是否有人有一个需要虚拟函数的协变返回类型的真实示例,或者是否能提供一个简单返回基指针或引用的卓越解决方案?
典型的例子是.clone()
/.copy()
方法。所以你总是可以做
obj = obj->copy();
不管 obj 的类型是什么。
编辑:这个克隆方法将在 Object 基类中定义(就像它实际上在 Java 中一样)。因此,如果克隆不是协变的,您要么必须进行强制转换,要么仅限于根基类的方法(与副本的源对象的类相比,根基类只有很少的方法)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)