【发布时间】:2012-01-28 08:47:39
【问题描述】:
当我从基本构造函数调用虚函数时,编译器不会给出任何错误。但是当我从基类构造函数调用纯虚拟函数时,它会给出编译错误。
考虑下面的示例程序:
#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()' 来自构造函数
这是什么原因?
【问题讨论】:
标签: c++ constructor compiler-errors virtual-functions dynamic-binding