4.6、虚析构函数
- 虚析构函数:在析构函数前加关键字virtual进行说明。
- 目的:使用delete运算符删除一个对象时,能保证析构函数被正确地执行。
格式:
class<类名>
{
virtual <类型><函数名>(<参数表>)=0;
……
} ;
4.7、纯虚函数和抽象类
4.7.1、纯虚函数
格式:class<类名>
{
virtual <类型><函数名>(<参数表>)=0;
……
} ;
- 作用:为派生类提供一个一致的接口。
- 在基类中不能为虚函数给出一个有意义的实现时,可将其声
明为纯虚函数,其实现留待派生类完成。
4.7.2、抽象类
- 定义:含有纯虚函数的类称为抽象类。
- 抽象类只能作为基类使用,其纯虚函数的实现由派生类给出;但派生类仍可不给出纯虚函数的定义,继续作为抽象类存在。
- 抽象类是不能实例化的,不能生成抽象基类的对象。
- 因此一般将该类的构造函数说明为保护的访问控制权限。
只能作为别的类的基类。 - 抽象类的作用
- 用作基类:在一个继承层次结构中,提供一个公共的根,并基于抽象类的操作,设计出对抽象类所描述的一类对象进行操作的公共接口,其完整的实现由派生类完成。
- 用作指针或引用的基类型:保证进入继承层次的每个类都具有(提供)纯虚函数所要求的行为。
- 在成员函数内可以调用纯虚函数,但在构造函数或析构函数内不能调用纯虚函数(纯虚函数没有实现代码)。
调用纯虚函数的例子:
class A
{
public :
virtual void f() = 0;
void g() {f();} //正确
A() {f();} //错误
}