C++多态简析
多态按字面的意思就是多种形态。当类之间存在层次结构,并且类之间是通过继承关联时,就会用到多态。或者可以理解为可以简单地概括为“一个接口,多种方法”,相同对象收到不同消息或不同对象收到相同消息时产生不同的实现动作。调用成员函数时,会根据调用函数的对象的类型来执行不同的函数。
再说白了,多态就是用父类型的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,RTTI技术,虚函数技术,要么是试图做到在编译时绑定,要么试图做到运行时绑定。C++中的多态分为两种,静态多态(编译时多态)和动态多态(运行时多态)。静态多态(编译时多态)通过重载函数实现,动态多态(运行时多态)通过虚函数实现。
在C++中,重载,覆盖(重写),重定义(隐藏)都属于多态,它们的区别在哪
重载:重载函数处在同一作用域。
函数名相同,函数列表必须不同。
覆盖(重写):必须是虚函数,且处在父类和子类中。
返回值,参数列表,函数名必须完全相同(协变除外)。
重定义(隐藏):子类和父类的成员变量相同或者函数名相同,
子类隐藏父类的对应成员。
子类和父类的同名函数不是重定义就是重写。
虚函数
虚函数 是在基类中使用关键字 virtual 声明的函数。在派生类中重新定义基类中定义的虚函数时,会告诉编译器不要静态链接到该函数。
我们想要的是在程序中任意点可以根据所调用的对象类型来选择调用的函数,这种操作被称为动态链接,或后期绑定。
class Shape {
protected:
int width, height;
public:
Shape(