Должна ли виртуальная функция иметь определение?

Необходимо ли иметь определение виртуальной функции?

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

#include <iostream>

using namespace std;

class base
{
   public:
      void virtual virtualfunc();
};

class derived : public base
{
   public:
   void virtualfunc()
   {
      cout << "vf in derived class\n";
   }
};

int main()
{
   derived d;
   return 0;
}

Это дает ссылку-ошибку:

В функцииbase::base():: неопределенная ссылка наvtable for base

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

Интересная вещь, которую я нахожу, состоит в том, что, если я не создаю экземпляр объекта классаderived, ошибка ссылки больше не существует. Почему это? Какое отношение имеет инстанцирование к указанной выше ссылке?

Ответы на вопрос(5)

Ваш ответ на вопрос