Ковариация С++ в параметрах
Я хотел знать, почему С++ не поддерживает коразмерность в параметрах, как в примере ниже, или если есть способ его достижения?
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
Тип возвращаемого значения допустим, поскольку derived
наследует от base
, но параметр функции не может работать - не все экземпляры base
также будут derived
. Что должно произойти в случаях, когда func
вызывается указателем на base
с параметром, который не является derived
? Самая производная реализация не может быть вызвана.