Вызов виртуальной функции и чистой виртуальной функции из конструктора

Когда я вызываю виртуальную функцию из базового конструктора, компилятор не выдает ошибок. Но когда я вызываю чисто виртуальную функцию из конструктора базового класса, возникает ошибка компиляции.

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

#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 () . Вместо этого он выдает ошибку компиляции:

error: вызывается абстрактная виртуальная `virtual void base :: virtualfunc () ' из конструктора

В чем причина этого?

5
задан curiousguy 27 May 2013 в 17:38
поделиться