这一节我们主要介绍一下抽象基类与纯虚函数的关系
首先,我们来看看纯虚函数
1、纯虚函数的定义
纯虚函数是在基类中声明的虚函数,它在基类中没有定义,但要求任何派生类都要定义自己的实现方法。在基类中实现纯虚函数的方法是在函数原型后加“=0”。如下
virtual void funtion()=0
2、定义纯虚函数的目的和意义
定义纯虚函数是为了实现一个接口,起到一个规范的作用。纯虚函数的意义在于:让所有的类对象(主要是派生类对象)都可以执行纯虚函数的动作,但类无法为纯虚函数提供一个合理的缺省实现。所以类纯虚函数的声明就是在告诉子类的设计者,“你必须提供一个纯虚函数的实现,但我不知道你会怎样实现它”。
接下来我们看看什么是抽象类
1、抽象类的定义
带有纯虚函数的类为抽象类。抽象类是一种特殊的类,它是为了抽象和设计的目的为建立的,它处于继承层次结构的较上层。
2、抽象类的作用:
抽象类的主要作用是将有关的操作作为结果接口组织在一个继承层次结构中,由它来为派生类提供一个公共的根,派生类将具体实现在其基类中作为接口的操作。所以派生类实际上刻画了一组子类的操作接口的通用语义,这些语义也传给子类,子类可以具体实现这些语义,也可以再将这些语义传给自己的子类。
例如:
#include<iostream>
using namespace std;
class Shape
{
public:
Shape(){};
~Shape(){};
virtual void Draw() = 0;
};
int main()
{
Shape s1;
return 0;
}
程序编译时,会提示:
以上错误表示:一个抽象类是不能被实例化的
注意:
抽象类是不能定义对象的。
抽象类只能作为基类来使用,其纯虚函数的实现由派生类给出。如果派生类中没有重新定义纯虚函数,而只是继承基类的纯虚函数,则这个派生类仍然还是一个抽象类。如果派生类中给出了基类纯虚函数的实现,则该派生类就不再是抽象类了,它是一个可以建立对象的具体的类。