Переопределение функции-члена с другим типом возврата

Рассмотрим пример ниже:

#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;
}

Компилятор выдает ошибку для приведенного выше кода, что для переопределенной функции существует конфликтующий тип. Почему нельзя переопределить функцию в производном классе с другим типом возврата?

Я считаю, что для переопределения функции виртуальный метод базового класса должен быть переопределен в производном классе. Чтобы переопределить метод, сигнатуры методов должны быть одинаковыми. Поскольку тип возврата не является частью сигнатуры, я полагаю, что даже если тип возврата отличается, метод все равно будет переопределен? В таком случае в приведенном выше коде виртуальная функция func переопределяется в производном классе с другим типом возврата. Но компилятор выдает ошибку. Правильно ли я понимаю?

21
задан nitin_cherian 23 January 2012 в 04:49
поделиться