多态
<1>前序
多态,顾名思义,是指一段程序能够有处理多个对象的能力。可以理解为“一个接口,多个方法”。
程序在运行时才决定调用的函数。同一个操作作用于不同的对象,调用不同的函数,产生不同的
执行结果。(通过指向父类的指针,来调用子类的函数),从而实现接口重用。多态一般由虚函数来
实现。
<2>虚函数
虚函数注意是为实现多态而设定的。当我们想要用父类的指针保存子类的对象,
希望子类和基类有相同的函数,
希望指针根据不同的对象,调用不同的函数,这就是多态。
使用方法:

virtual 返回值类型 函数名(数据类型 变量名1,...);

特点:


(1)非类的成员函数不能定义为虚函数


(2)构造函数不能定义为虚函数,但可以将析构函数定义为虚函数 


(3)只需要在声明函数的类体中使用关键字“virtual”将函数声明为虚函数,


   而定义函数时不需要使用关键字“virtual”。


(4)当将基类中的某一成员函数声明为虚函数后,派生类中的同名函数


(函数名相同、参数列表完全一致、返回值类型相关)自动成为虚函数。



<3>[3]覆盖(重写)、重载、隐藏。


覆盖(重写):子类的函数覆盖父类的函数,子类重新定义父类的虚函数(针对虚函数而言)


               常用于继承关系中


特点:


(1)父类和子类函数名相同


(2)父类和子类的参数以及返回值值相同


(3)父类的函数中必须含有virtual关键字。 



重载:函数名相同,参数不同。与继承没有直接关联


特点:


(1)相同的作用域 (都在类中,或者类外)


(2)函数名相同


(3)参数不同


(4)virtual关键字可有可无


(5)返回值可以不同



隐藏:子类的函数屏蔽了父类的同名函数。只有是同名函数,没有virtual,不管参数列表是否形同。


           父类的函数都会被隐藏。


(1)不在同一个作用域(分别位于子类和父类)


(2)函数名相同


(3)返回值可以不同


(4)参数可以不同,此时,不论有无 virtual 关键字,基类的函数将被隐藏


     (与重载有区别)


(5)参数相同,但是基类函数没有 virtual关键字。此时,


     基类的函数被隐藏(注意与覆盖的区别)


第二天