C++学习笔记 -虚函数和多态性

面象对象程序设计的三特性:多态性、封装性、多态性

多态性指的是将同一个命令发给不同的对象而产生不同的行为。对于同一个命令,不同的对象执行不同的操作。“命令”指调用相应函数。“行为”指的是函数的不同实现。​

利用多态性和虚函数使程序扩展性可以大大加强。​

C++为实现多态性提供了两种机制:一种是静态绑定(也称早捆绑),另一种就是动态绑定(也称晚捆绑)。

绑定指的是对同名函数的选择问题,就是程序如何选择同名的函数。一般来说同名函数实现方式有以下三种:

运算符重载(静态绑定)

重载函数(静态绑定)

虚函数(​动态绑定)

虚函数的目的就是告诉编译器在编译的时候先不要进行静态绑定,等到程序执行的时候再进行选择。动态绑定必须通过虚函数实现,没有虚函数的多态都是静态绑定。

虚函数一定是成员函数,非成员函数是不能定义为虚函数的。但是,在类中并不是所有的函数都可以定义为虚函数,比如:静态成员函数,构造函数是不能定义为虚函数的,但是析构函数在某些情况下可以定义为虚函数。​

在类的继承关系中,不同层次的类中可以出现相同的名字,成员数据和同名的函数。虽然名字相同,但是它们的实现或代表的意义不同。因此,如果基类中的成员和派生类中的成员存在同名的情况,C++的编译系统将采用同名覆盖原则来处理因为同名而存在的冲突问题。虚函数的作用是可以通过基类的指针或者对象引用来访问基类和派生类中被声明的同名函数。​

虚函数的特征:虚函数的一个重要特点就是继承性。在基类中声明的虚函数,在派生类中函数的声明(函数类型,函数名,函数参数)完全相同的函数为虚函数。声明虚函数时可以使用virtual关键字,也可以不使用。因为当将基类中的某一成员函数声明为虚函数后,派生类中的同名函数自动成为虚函数。(但建议加上 virtual关键字,提高程序可阅读性)​

C++学习笔记 -虚函数和多态性