多态性的一般表述:向不同的对象发送同一个消息,不同对象接收到后会有不同的行为发生。
c++中的多态性有两种类型。
1.静态多态性:通过方法和运算符的重载,这种方式在编译时就能够确定调用的是哪一个方法或者操作符的哪一个定义,所以静态多态性又被称为编译时多态性。
2.动态多态性:通过虚函数的重载来实现,编译时不知道调用的时哪个类的方法,调用哪个方法是在运行时动态绑定的。动态多态性可以实现通过基类的指针或者引用来调用子类中的同名函数(不仅与基类函数有相同的名字,而且还有相同的函数签名)。
与多态性相关的一些概念。
虚函数:虚函数允许子类重新定义与基类同名的函数,并且可以通过基类的指针或者引用来访问基类和派生类中的同名函数。声明虚函数就是在基类中成员函数前面添加关键字virtual,子类中可以添加virtual,也可以不添加这个关键字,都自动的成为虚函数。另外有个特别要注意的地方,对于析构函数来说,将它定义成虚函数后,子类中的析构函数也自动成为虚函数,尽管基类和子类中的析构函数的函数名不相同;不能将构造函数定义为虚函数。
纯虚函数:没有函数体并且赋值为0的函数的虚函数就是纯虚函数,eg. virtual void funname() =0 ;
抽象类(抽象基类):成员函数中存在纯虚函数的类叫做抽象类,由于抽象类不能实例化,只能作为基类,所以又称为抽象基类。