C++ - Polymorphism
简介
多态 是C++语言的一大特色。一个操作随着所传递或捆绑的对象类型的不同能够做出不同的反应,其行为模式称为多态1。而且,仅仅对于对象的指针和引用的间接访问,才会发生多态。
虚函数
在使用类的C++语言中,抽象编程需要使用 虚函数 机制。基类与派生类的同名操作,只要标记上 virtual2 ,则该操作(虚函数)便具有多态性。一旦标记基类的函数为虚函数,便有连锁反应,后面继承的类中一切同名成员函数都变成了虚函数。这样一来,如果实际对象是基类对象,那么调用的就是基类成员函数;如果实际对象是派生类对象,那么调用的就是派生类成员函数。
虚函数仅用于继承结构层次中的基类和派生类。除了基类和派生类的函数名必须相同外,连参数类型、个数和顺序都要相同。也就是说,基类和派生类的虚函数不能只是名字重载,而且要一模一样3。
- 只有类的成员函数才能声明为虚函数。
- 静态成员函数不能是虚函数。
- 内联函数不能是虚函数。
- 构造函数不能是虚函数。
- 析构函数可以是且通常声明为虚函数。
纯虚函数
纯虚函数是指被标明为不具体实现的虚函数。纯虚函数一旦声明,就不用定义。声明形式是在虚函数声明形式后跟“ = 0”。
抽象类
抽象类是指在类定义中至少声明一个纯虚函数的类。抽象类是不允许有实例对象的,即不能由抽象类创建实例对象,其用途只是为了继承。
总结
总之, 要想实现多态, 必须用虚函数(在基类中用关键字virtual). 对于派生类, 必须对虚函数进行实现. 对于基类, 有两个选择: 第一, 实现虚函数; 第二, 将虚函数声明为纯虚函数(相应地, 基类也就变成了抽象类).