22

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

1 回答 1

22

返回类型是允许的,因为derived继承自base,但函数参数不能工作 - 并非所有base实例都是 a derived。在使用不是 a 的参数func的指针上调用的情况下应该发生什么?最衍生的实现是不可调用的。basederived

于 2012-08-06T00:09:55.193 回答