C++多态性
Posted Linux编程学堂
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++多态性相关的知识,希望对你有一定的参考价值。
1多态性与虚函数
1.1 多态性的概念
“多态”的定义,就是一种事务有多种状态。在C++面向对象编程中,“多态性”是指一个函数名,可以有多种函数功能的定义。
就是说,在不同的情况下,调用同一个函数,执行不同的功能。例如函数的重载,就是一种多态性。
所以,“多态性(polymorphism)”是面向对象程序设计的一个重要特征。如果一种语言只支持类,而不支持多特,是不能被称为面向对象语言的,只能说是基于对象的。如Ada,VB就是属于此类。C++支持多态性,在C++程序设计中能够实现多态性。利用多态性可以设计和实现一个易于扩展的系统。
在现实生活中可以看到许多“多态性”的例子。如学校校长向社会发布一条消息:9月1日新学年开学。不同的对象会作出不同的响应:学生准备好课本准时到学校上课,家长要筹集学费,老师要备好课等等,由于事先对各种人员的任务已经作了规定,因此,在得到同一个消息的时候,各种人都知道自己应当怎么样去做,这就是多态性。
可以设想,如果不利用多态性,那么,校长就要分别给学生,家长,教师等等许多不同的对象分别发送通知,通知他们怎么样去做,这是一个十分复杂细致的工作。
现在,利用了多态性机制,校长在发布消息的时候,不必一一具体考虑不同人员是怎么样执行,至于各类人员在接到消息后应当做什么,并不是临时决定的,而是学校的工作机制事先安排好的。校长只需要不断发布各种消息,各种人员就会按预定方案进行工作。
从系统实现的角度来看,多态性分为两类:静态多态性和动态多态性。以前学过的函数重载和运算符重载实现的多态性是属于静态多态性,在程序编译时系统就能决定调用的是哪个函数,因此,静态多态性又称为“编译时的多态性”。静态多态性是通过函数的重载实现的(运算符重载实质上也是函数重载)。动态多态性是在程序运行过程中才动态地确定操作所针对的对象。它又称为“运行时的多态性”。动态多态性是通过“虚函数(virtual function)”实现的。
1.2 静态多态性
上面我们描述了“多态性”的定义,那么,我先来看看之前学习过了“函数重载”,就定义多个函数,函数的名称可以一样,函数的参数类型不同。那么,就可以定义多个同名函数。
在调用函数的时候,编译器根据函数参数的类型和个数,确定需要调用执行的函数。程序测试例子如下:
程序运行结果如下:
可以看到,定义了两个同名函数func(),它们的参数不一样。所以是函数的重载。调用重载函数func()时,根据参数的不同,调用不同的重载函数。
这一切,都是在函数编译的时候已经确定。所以,称为:静态多态性。
那么,下面我们重点分析“动态多态性”,这是一项非常重要的C++技术。
以上是关于C++多态性的主要内容,如果未能解决你的问题,请参考以下文章
如何移除网站Response Headers中的X-Powered-By信息?
DouPHP去除Powered by DouPHP版权的方法