0%

C++之多态

多态是面向对象程序设计语言的一个重要特点, 是一种将不同的特殊行为和单个泛化记号相关联的能力. 更加直白的表述是同样的语法结构对应不同的具体功能. 从这个角度上来说, 模板和函数重载是一种静态的多态, 而基于虚函数实现的多态则是动态多态.

在介绍动态多态前, 需要对虚函数进行介绍. 虚函数就是类的非static的成员函数. 虚函数声明的语法规则如下:

virtual 类型说明符 函数名(参数表)

虚函数和继承密切相关, 如果一个类中的成员函数被标记为虚函数, 这就意味着该成员函数在子类中可能有不同的实现. 许多情况下, 基类不会具体实现虚函数, 这时可以将虚函数声明为纯虚函数. 纯虚函数是一种特殊的虚函数, 它在基类中只有声明但没有实现, 要求任何子类都要定义子类相关的具体实现方法. 纯虚函数的声明方式是:

    virtual 类型说明符 函数名(参数表) = 0
    

带有虚函数的类被称为抽象类, 抽象类是为了抽象和设计的目的而建立的, 通常处于继承层次结构的较上层. 抽象类提供了一组子类操作接口的通用定义 — 纯虚函数. 通常抽象类只描述这组子类共同的操作接口, 由子类负责实现.

如果抽象类的子类没有实现纯虚函数, 而只是继承基类的纯虚函数, 那么这个子类仍然还是一个抽象类.