c++多态分为静态多态和动态多态。

1、静态多态:静态多态实现的方式是重载,而重载实现的机制是函数的重命名,与类型函数名是有关系的,达到重名名就达到了重载的效果。

2、动态多态:(一个接口的多种实现)多态实现的前提是有子类、父类,有继承关系;要调用的函数为虚函数并且子类要对父类进行重写;父类的指针或者引用指向父类则调用父类的虚函数,指向子类则调用子类的虚函数。

  也可以理解为:当使用基类的指针或者引用调用重写的虚函数时,当指向父类调用的就是父类的虚函数,指向子类调用的就是子类的虚函数。

简单代码实现:

class Person
{
public:
	virtual void BuyTickets()
	{
		cout<<"买票"< 
  

在多态中需要注意的问题:

1. 派生类重写基类的虚函数实现多态,要求函数名、参数列表、返回值完全相同。(协变除外)

2. 基类中定义了虚函数,在派生类中该函数始终保持虚函数的特性。

3. 只有类的成员函数才能定义为虚函数。

4. 静态成员函数不能定义为虚函数。

5. 如果在类外定义虚函数,只能在声明函数时加virtual,类外定义函数时不能加virtual。

6. 构造函数不能为虚函数,虽然可以将operator=定义为虚函数,但是最好不要将operator=定义为虚函数,因为容易使用时容易引

起混淆。

7. 不要在构造函数和析构函数里面调用虚函数,在构造函数和析构函数中,对象是不完整的,可能会发生未定义的行为。

8. 最好把基类的析构函数声明为虚函数:因为派生类的成员来自两部分,一个是从基类继承的,一个是它自己本身定义的。实例化对象时利用基类的构造函数初始化从基类继承下来的,派生类的构造函数实例化自己定义的那部分,所以,派生类的析构函数只会析构自己定义的那部分,如果基类的析构函数不是虚函数,则基类的析构函数不能析构从基类继承下来的那部分,就会出现只删一半的现象。

纯虚函数

在成员函数的形参后面写上=0,则成员函数为纯虚函数。包含纯虚函数的类叫做抽象类(也叫接口类),抽象类不能实例化出对象。纯虚

函数在派生类中重新定义以后,派生类才能实例化出对象。