我想知道为什么C ++不支持参数中的协方差,如下例所示,或者是否有办法实现它?
class base {
public:
virtual base* func(base * ptr) { return new base(); }
};
class derived : public base {
public:
virtual derived* func(derived * ptr) override { return new derived(); } //not allowed
};
答案 0 :(得分:14)
允许返回类型,因为derived
继承自base
,但函数参数不起作用 - 并非所有base
实例也都是derived
。如果在指向func
的指针上调用base
并且参数不是derived
,则会发生什么?派生最多的实现不可调用。