参数中的C ++协方差

时间:2012-08-06 00:01:05

标签: c++ virtual covariance

我想知道为什么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
};

1 个答案:

答案 0 :(得分:14)

允许返回类型,因为derived继承自base,但函数参数不起作用 - 并非所有base实例也都是derived。如果在指向func的指针上调用base并且参数不是derived,则会发生什么?派生最多的实现不可调用。