相关疑难解决方法(0)

从构造函数调用虚函数和纯虚函数

当我从基础构造函数调用虚函数时,编译器不会给出任何错误.但是当我从基类构造函数调用纯虚函数时,它会产生编译错误.

考虑下面的示例程序:

#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;
}
Run Code Online (Sandbox Code Playgroud)

这里可以看出纯虚函数有一个定义.我期望在bptr->virtualfunc()执行时调用基类中定义的纯虚函数.相反,它给出了编译错误:

错误:从构造函数调用的抽象虚拟`virtual void base :: virtualfunc()'

这是什么原因?

c++ constructor virtual-functions compiler-errors dynamic-binding

5
推荐指数
1
解决办法
714
查看次数