Подтвердить что ты не робот

Ковариация С++ в параметрах

Я хотел знать, почему С++ не поддерживает коразмерность в параметрах, как в примере ниже, или если есть способ его достижения?

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
};
4b9b3361

Ответ 1

Тип возвращаемого значения допустим, поскольку derived наследует от base, но параметр функции не может работать - не все экземпляры base также будут derived. Что должно произойти в случаях, когда func вызывается указателем на base с параметром, который не является derived? Самая производная реализация не может быть вызвана.