Обязательно ли иметь определение виртуальной функции?
Рассмотрим этот пример программы ниже:
#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
У меня нет определения виртуальной функции в базовом классе. Почему эта ошибка возникает, даже если я явно не вызвал виртуальную функцию?
Интересно, что я обнаружил, что если я не создаю экземпляр объекта класса , производного
, ошибка ссылки больше не возникает. там. Почему это? Какое отношение имеет создание экземпляра к указанной выше ошибке ссылки?