我想知道为什么 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
};
最佳答案
返回类型是允许的,因为 derived
继承自 base
,但函数参数不能工作 - 并非所有 base
实例都会derived
也是。如果在指向 base
的指针上调用 func
且参数不是 derived
的情况下会发生什么?最衍生的实现是不可调用的。
关于参数中的 C++ 协方差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11821158/