题目为定义一个抽象基类B,并用它派生一个新类C,在C中实现抽象基类的纯虚函数接口;通过抽象基类的引用调用派生类的函数成员;在主函数中验证上述功能。
编写的代码如下:
#include <iostream>
using namespace std;
class B //声明抽象基类
{
public:
virtual void print() const = 0; //纯虚函数
};
class C : public B
{
public:
virtual void print() //对虚函数进行再定义 !!!const必须要有
{
cout << "通过抽象基类的引用调用派生类的函数成员" << endl;
}
};
int main()
{
C c;
B &b =c;
b.print();
return 0;
}
认为程序已经正确,但是编译却报错:error C2259: 'C' : cannot instantiate abstract class due to following members,百度得出的结果是抽象基类的方法必须完全实现,对此很疑惑。
后来仔细检查发现是在C类中对纯虚函数进行再定义时函数漏写了const,应该为
virtual void print() const
{
...
}
改正后编译通过,于是来此记录一下。
派生类中的虚函数要保持其虚特征,必须与基类虚函数的函数原型完全相同,否则就是普通的重载函数,与基类的虚函数无关。