写在前面
这一篇博客记录一下自己理解的虚函数的相关内容。虚函数在刚开始学习C++的时候并不理解为什么需要这个东西?现在觉得要理解这个概念,需要对面向对象编程这个软件设计模式要有了解。学习C++不光要能理解语法特征,还要明白一些常用的软件设计模式。 这篇博客我也还是会结合一些网络上的资料,加上自己的理解阐述一下对虚函数的理解。
参考资料
面向对象的三大特点
之前也有说过,虚函数与面向对象编程关联很大,所以在了解虚函数之前,可以先加强对“面向对象编程”的理解。面向对象的三大特点:
- 多态
- 封装
- 继承
面向对象中的对象具体是什么概念可以用生活中的东西类比。比如说汽车,我们用语言描述车的时候,脑海里就会浮现车的相关信息:四个轮子、一个外壳、四个车灯、一个方向盘…等。所以程序中我们也可以用对象来描述汽车这种生活中实际的物体。当然,程序要处理的事务千奇百怪,对象可能在生活中有实际对应的(比如汽车、动物)、也有可能是没有实物但存在人们认知中的(比如数据表、一个窗口)、甚至仅仅是逻辑上的概念(比如图形、 车辆这种宽泛的概念)。
所以,对于对象有一个大概的了解,不难理解多态了。汽车有很多种类:轿车、货车、巴士等等;动物也有很多种类:老虎、狮子等等。这些分类的物体也可以看做对象,这些对象与原来的大类对象(比如汽车、动物)体现了一种继承的关系。
而轿车、货车、巴士等多种种类的汽车与大类对象:汽车还是有很多相同的地方,比如:四个轮子,一个方向盘,那么在实际编程过程中,我们希望子类的相同属性能够用尽量少的代码来描述,这样更多的精力就可以放在不同子类的差异上了。那么同样是汽车,四个轮子,可以轿车、货车、巴士具体种类的车辆时,轮子大小不同,但是都是四个轮子啊,所以这里就体现了多态。反正都是汽车,肯定有四个轮子,如果在需要确定汽车种类的时候,我们再决定轮子大小,不需要确定种类的时候,关注汽车的轮子特点就好了。
而封装则通过public、private这些关键字体现。一个对象具有自己的成员变量与成员函数,封装给对象提供了对象之间交互的方法,其他对象或者程序员可以通过这个对象提供的对外接口使用对象,同时对象也能封装自己的关键属性。还是举汽车为例子,咱们开汽车只需要能打开车门、能启动发动机等一些简单功能,但是汽车公司肯定不希望我们能轻易修改汽车的电力系统、发动起机械系统。所以汽车公司就将这些系统封装了,而我们用户只需要使用一些简单的操作