当我从基础构造函数调用虚函数时,编译器不会给出任何错误.但是当我从基类构造函数调用纯虚函数时,它会产生编译错误.
考虑下面的示例程序:
#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