内容会持续更新,有错误的地方欢迎指正,谢谢!
多态是什么?有什么作用?
同一种事物所表现出的多种形态,简单地说是“一个接口多种实现”。
有两种类型的多态性:
- 编译时的多态性:编译时的多态性是通过函数重载或运算符重载来实现的。
- 运行时的多态性:运行时的多态性是通过虚函数与基类指针共同作用实现的。
作用:
- 静态多态的作用:减少了名字(比如:函数名)的数量,避免了名字空间的污染,对于程序的可读性有很大的好处。
- 动态多态的作用:多态技术允许将基类指针或基类引用指向子类对象,根据对象的动态类型来决定调用的是哪个子类中的这个同名方法,从而解决了同名覆盖问题,写出了通用的代码,即扩展性优秀的代码,以适应需求的不断变化。
类的成员函数的重载、覆盖(重写override)、隐藏(重定义new)
函数重载:重载函数通常用来命名一组功能相似的函数:两个函数在同一个类中、 两个函数的名字相同、两个函数的形参列表一定不同。(属于编译时的多态)
函数覆盖:覆盖是指派生类函数覆盖基类函数:两个函数在不同的类中、 两个函数的名字相同、基类函数一定是虚函数、两个函数的形参列表和返回值类型都要完全一样。(属于运行时的多态)
函数隐藏:指派生类的函数屏蔽了与其同名的基类函数:有两种情况
- 两个函数在不同的类中、 两个函数的名字相同、两个函数的形参列表不同;
- 前提条件同第一点,如果派生类函数与基类函数形参列表相同,但在基类函数中没有virtual关键字,也会发生函数隐藏。(属于同名覆盖,多态就能解决同名覆盖这个问题)
总结:覆盖是父类和子类对应的那个函数的 参数列表完全相同;而重写是参数列表不同就行或者父类中那个函数根本就不是虚函数。