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

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

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

#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 () :: undefined ссылка на vtable для base

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

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

7
задан Toby Speight 20 July 2017 в 17:00
поделиться