当我从基本构造函数调用虚函数时,编译器不会给出任何错误。但是当我从基类构造函数调用纯虚拟函数时,它会产生编译错误。
考虑下面的示例程序:
#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()'
这是什么原因?