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