Рассмотрим пример ниже:
#include <iostream>
using namespace std;
class base
{
public:
virtual int func()
{
cout << "vfunc in base class\n";
return 0;
}
};
class derived: public base
{
public:
double func()
{
cout << "vfunc in derived class\n";
return 0;
}
};
int main()
{
base *bptr = new derived;
bptr->func();
return 0;
}
Компилятор дает ошибку для вышеуказанного кода, что для функции overriden существует конфликтный тип. Почему невозможно переопределить функцию в производном классе с другим возвращаемым типом?
Я считаю, что для переопределения функции виртуальный метод базового класса должен быть переопределен в производном классе. Чтобы переопределить метод, подписи методов должны быть одинаковыми. Поскольку тип возврата не является частью подписи, я считаю, что даже если есть разница в типе возврата, метод все равно будет переопределен? В этом случае для кода выше виртуальная функция func
переопределяется в производном классе с другим типом возвращаемого значения. Но компилятор выдает ошибку. Правильно ли я понимаю?