4、抽象基类
纯虚函数
纯虚函数清晰明了地告诉用户当前这个函数时没有实际意义的。和普通的虚函数不一样,一个纯虚函数无须定义。我们通过在函数体的位置(即在声明语句的分号之前)书写=0就可以将一个虚函数说明纯虚函数。其中,=0只能出现在类内部的虚函数声明语句处。
virtual 返回值类型 函数名(参数表)= 0
值得注意的是,我们也可以为纯虚函数提供定义,不过函数体必须定义在类的外部。也就是说,我们不能在类的内部为一个=0的函数提供函数体。
含有纯虚函数的类是抽象基类
含有(或者未经覆盖直接继承)纯虚函数的类是抽象基类(类似于Java的抽象类)。抽象基类负责定义接口,而后续的其他类可以覆盖该接口。我们不能(直接)创建一个抽象基类的对象。
派生类构造函数只初始化它的直接基类
关键概念:重构
在Quote的继承体系中增加Disc_quote类是重构的一个典型示例。重构负责重新设计类的体系以便将操作和/或数据从一个类移动到另一个类中。对于面向对象的应用程序来说,重构是一种很普遍的现象。
值得注意的是,即使我们改变了整体继承体系,那些使用了Buik_quote或Quote的代码也无须进行任何改动。不过一旦类被重构(或以其他方式被改变),就意味着我们必须重新编译含有这些类的代码了。