前言
上一讲我们提到了纯虚函数,接下来由此展开抽象类的学习
概念
- 含有纯虚函数的基类是不能用来定义对象的。
- 纯虚函数没有实现部分,不能产生对象,所以含有纯虚函数的类是抽象类。
- 抽象类是一种特殊的类,它是为了抽象和设计的目的而存在的,它处于继承层次结构的较上层。
- 抽象类是不能定义对象的,在实际中为了强调一个类是抽象类,可将该类的构造函数说明为保护的访问控制权限。
作用
将有关的组织在一个继承层次中,由它来为它们提供一个公有的根,相关的子类是从这个根派生出来的。
注意
:子类如果不重写父类中的纯虚函数,那么这个子类也将演化成为一个抽象类.
抽象类刻画了一组子类的操作接口的通用语义,这些语义也回传给子类,一般而言、抽象类只描述这组子类共同的操作接口,而完整的实现留给子类。
注意
:派生类必须重写所有的纯虚函数,缺少一个都不能实例化出对象
注意
:在继承关系中,抽象类虽然不能实例化出对象,但是可以作为隐藏基对象存在于子类中,作为子类型的一个无名对象的结构。
抽象类的规定
- 抽象类只能作为其他类的基类,不能建立抽象类对象
- 抽象类不能用作参数类型,函数返回类型或者显式转换的类型
- 可以指定抽象类的指针或引用,该指针可以指向它的派生类,进而实现多态性。
代码示例:
接口
C++中实现接口的方式是:在基类中只给出纯虚函数的声明,然后在派生类中实现纯虚函数的具体定义的方式实现接口,不同派生类实现接口的方式也不尽相同,从而实现多态。