概念(复习用)
什么是多态
多态:在面向对象编程中,一种接口(函数)的多种实现(函数内容,作用域)即为多态;多态分静态和动态;静态是指在编译时就可以确定选择哪种实现,动态是运行时才确定选择哪种实现;
静态有函数重载和泛型编程,如add()根据数据类型重载,在编译时就能选好哪一个;动态是虚函数,比如父类和子类中有同名函数delete_data(),在运行时通过基类指针指向的不同对象来选择到底调用哪个;
C++谈多态一般指动态的多态;
什么是虚函数
虚函数:定义函数时在最前面加上virtua关键字;就定义了一个虚函数;
注意:
1、虚函数只能是类中的非静态成员函数,也就是普通成员函数和析构函数;
2、不能是构造函数,但可以是析构函数;
怎么实现(多态)多态
C++用虚函数来实现,在父类中定义虚函数,子类中重写,运行时根据对象的实际数据类型来调用相应函数,如果对象类型是基类,则调用基类的虚函数,反之调用子类的虚函数;
三个条件:
1、前提:有子类有继承;
2、在子类中必须对基类的虚函数进行重写;
3、必须通过基类指针指向子类对象或者基类引用子类对象;
怎么理解:
1、有继承才有一个函数名在父、子类中不同的实现,才能谈多态;
2、多种实现就是指函数的函数体不同,只需要重写要用来实现多态的虚函数,不需要多态的函数普通继承即可;
3、通过基类的指针指向父类的对象,调用的是父类中的虚函数;通过基类指针指向子类的对象,调用的是子类中的虚函数;这就实现了多态;引用也是同样的效果,
学到这里,回顾一下,是不是指针能怎么做的,引用也能怎么做,这不就侧面说明了引用的本质:就是指针
tips:什么是虚函数重写:对于父类中要用来实现多态的虚函数,在子类中定义出函数头(返回类型,函数名,参数列表)完全一样但是函数体不同的虚函数;
代码及讲解(学习用)
虚函数工作原理
先把大佬文章放在这里,回头再来写自己的;
C++虚函数表解析