C++中的多态
多态的含义
多态简单来说就是调用一条语句会有多种状态
实现多态的方式有重载、重写、重定义
重载:函数名相同,函数的参数个数、参数类型或参数顺序三者中必须至少有一种不同。函数返回值的类型可以相同,也可以不相同。发生在同一个作用域
重定义(隐藏):子类重新定义父类中有相同名称的非虚函数 ( 参数列表可以不同 ) ,派生类的函数屏蔽了与其同名的基类函数。
重写(覆盖):一般发生在子类和父类继承关系之间。子类重新定义父类中有相同名称和参数的虚函数。
通过虚函数实现的多态:
- 被调用的函数必须是虚函数(被virtual修饰的类成员函数称为虚函数),且派生类必须对基类的虚函数进行重写
- 必须通过基类的指针或者引用调用虚函数
覆盖
虚函数的重写(覆盖):派生类中有一个跟基类完全相同的虚函数(返回值类
型、函数名字、参数列表完全相同),称子类的虚函数重写了基类的虚函数。
在重写基类虚函数时,派生类的虚函数在不加virtual关键字时,也可以构成重写,但是最好不这样写
覆盖的特殊情况
1.协变:
派生类重写基类虚函数时,基类虚函数返回基类对象的指针或者引
用,派生类虚函数返回派生类对象的指针或者引用时,称为协变。
2.析构函数的重写