C++学习之路—多态性与虚函数(一)利用虚函数实现动态多态性
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C++学习之路—多态性与虚函数(一)利用虚函数实现动态多态性,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1808字,纯文字阅读大概需要3分钟。
内容图文
(根据《C++程序设计》(谭浩强)整理,整理者:华科小涛,@ http://www.cnblogs.com/hust-ghtao 转载请注明)
多态性是面向对象程序设计的一个重要特征。顾名思义,多态性就是一个事物具有多种形态。在面向对象方法中一般是这样表述多态性的:向不同的对象发送同一个消息,不同的对象在接收时会产生不同的行为。也就是说,每个对象可以用自己的方式去响应共同的消息,所谓消息,就是调用函数,不同的行为就是指不同的实现,即执行不同的函数。在C++中,多态性表现形式之一是:具有不同功能的函数可以用同一个函数名,这样就可以实现用一个函数名调用不同内容的函数。
从系统实现的角度来看,多态性分为两类:静态多态性和动态多态性。
静态多态性是通过函数重载实现。由函数重载和运算符重载(运算符重载实质上也是函数重载)形成的多态性属于静态多态性,要求程序在编译时就知道函数调用的全部信息,因此,在程序编译时系统就能决定要调用的是哪个函数。静态多态性的函数调用速度快、效率高,但是缺乏灵活性,在程序运行之前就已经决定了执行的函数和方法。
动态多态性是通过虚函数实现的。特点是:不在编译时确定调用的哪个函数,而是在程序运行过程中动态地确定操作所针对的对象。
这里先介绍动态多态性,静态多态性以后再介绍。
1 虚函数的作用
在同一个类中是不能定义两个名字相同、参数个数和类型都相同的函数的,否则就是“重复定义”。但在类的继承层次结构中,在不同的层次中可以出现名字相同、参数个数和类型都相同而功能不同的函数,这种情况是合法的,因为它们不在同一个类中,编译系统按照同名覆盖的原则决定调用的对象。
那么,能否用同一个调用形式来调用派生类和基类的同名函数。在程序中不是通过不同的对象名去调用不同派生层次中的同名函数,而是通过指针来调用,要做的只是在调用前临时给指针变量赋予不同的值(使之指向不同的类对象)。C++中的虚函数就是用来解决动态多态问题的。所谓虚函数,就是在基类声明函数时虚拟的,并不是实际存在的函数,然后在派生类中才正式定义此函数。在程序运行期间,用指针指向某一派生类对象,这样就能调用指针指向的派生类对象中的函数,而不会调用其他派生类中的函数。虚函数的作用是允许在派生类中重新定义与基类同名的函数,并且可以通过基类指针或引用来访问基类和派生类中的同名函数。
例子如下:
1:class Student
2: {
3:public:
4: ...
5:void display () ; //输出数据成员 num name score
6:protected:
7:int num ;
8: string name ;
9:float score ;
10: };
11:
12:class Graduate : public Student
13: {
14:public:
15: ...
16:void display () ; //输出成员函数 num name score wage
17:private:
18:float wage ;
19: };
20:
21:int main()
22: {
23: Student stud1 ( 1001 ,"Li" , 87.5 ) ; //定义基类对象
24: Graduate grad1 ( 2001 , "Wang" , 98.5 , 1200 ) ; //定义派生类对象
25: Student* pt = &stud1 ; //定义基类指针变量,指向stud1
26: pt->display() ;
27: pt = &grad1 ; //基类指针变量指向派生类对象grad1
28: pt->display() ;
29:
30:return 0 ;
31: }
内容总结
以上是互联网集市为您收集整理的C++学习之路—多态性与虚函数(一)利用虚函数实现动态多态性全部内容,希望文章能够帮你解决C++学习之路—多态性与虚函数(一)利用虚函数实现动态多态性所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。