Когда я вызываю виртуальную функцию из базового конструктора, компилятор не выдает никакой ошибки. Но когда я вызываю чисто виртуальную функцию из конструктора базового класса, она выдает ошибку компиляции.
Рассмотрим пример программы ниже:
#include <iostream>
using namespace std;
class base
{
public:
void virtual virtualfunc() = 0;
//void virtual virtualfunc();
base()
{
virtualfunc();
}
};
void base::virtualfunc()
{
cout << " pvf in base class\n";
}
class derived : public base
{
public:
void virtualfunc()
{
cout << "vf in derived class\n";
}
};
int main()
{
derived d;
base *bptr = &d;
bptr->virtualfunc();
return 0;
}
Здесь видно, что чисто виртуальная функция имеет определение. Я ожидал, что чистая виртуальная функция, определенная в базовом классе, будет вызвана при выполнении bptr->virtualfunc()
. Вместо этого он дает ошибку компиляции:
ошибка: вызывается абстрактная виртуальная `virtual void base :: virtualfunc () '
от конструктора
В чем причина этого?