Я пробуя ковариаитиий тип возврата и следующий кодКовариантного возвращаемого типа ошибка недопустимого преобразования
class Base
{
public:
virtual Base* clone() const
{
cout << "this is from Base " << endl;
return new Base(*this);
}
};
class Derived : public Base
{
public:
virtual Derived* clone() const
{
cout << "this is from Derived " << endl;
return new Derived(*this);
}
};
int main()
{
Base* d = new Derived;
Derived* d2 = d->clone(); // invalid conversion from ‘Base*’ to ‘Derived*’
return 0;
}
Почему линия Derived* d2 = d->clone();
дает недопустимую ошибку преобразования, так как тип Derived *
, что clone
возвращается в класс Derived
? Если я изменю его на Base* d2 = d->clone();
, он запустится, но он также распечатает «это из производного», указывая, что это clone
в названии Derived
.
'.clone()': вставить java в C++ ... ошибка: недопустимый аргумент ... ошибка: вставить C++ в java ... ошибка: неверный аргумент ... – bolov
повторный вопрос http://stackoverflow.com/q/29179035/3270926 – Youssef
@ Юссф: Не совсем, нет. –