12抽象基类中的所有virtual函数都必须声明为纯virtual函数吗?
包含纯虚函数的类称为抽象类,不能用抽象类创建对象,只能继承抽象类。
但并不是抽象类中所有的virtual函数都必须声明为纯virtual函数。
抽象类可以包含的虚函数有3种类型:
1
非纯虚函数的虚函数
2
没有函数体的纯虚函数
3
虽然是纯虚函数,但提供了定义(包含函数体)。此种情况下,函数体只能在类外定义,不能在类内。
下面是一个例子:
#include<iostream>
using namespace std;
class a
{
public:
virtual void f1()
{
cout<<"f1 非纯虚函数的虚函数"<<endl;
}
//没有函数体的纯虚函数
virtual void f2()=0;
//有函数体的纯虚函数,函数体只能在类外定义
virtual void f3()=0;
};
void a::f3()
{
cout<<"f3 有函数体的纯虚函数"<<endl;
}
class b : public a
{
public:
virtual void f2()
{
cout<<"f2 在子类中为父类的没有函数体的纯虚函数提供实现"<<endl;
}
virtual void f3()
{
a::f3();
}
};
int main()
{
b b1;
b1.f1();
b1.f2();
b1.f3();
return 0;
}