对C++多态的一点理解
作为一个C++新手,我浅谈一下我对多态的一点理解。
首先,引用几句话:
1、继承是一种抽象,它允许程序员在某些时候忽略相似对象的差异,又在其他时候利用这些差异。——《C++沉思录》
2、继承就是为多态服务的。
3、C++中只有通过指针调用虚函数的时候,才能实现多态。
4、是父类的指针指向子类,而不是反过来。
5、多态有助于实现拓展性和替换性。
接下来看一个例子:
 

假设,父类J最有一个函数(虚函数),名字叫做virtual void Open(“开机”);
子类,D,K,F,X继承了父类J,都拥有了open这个方法,并分别重写这个方法,如下:
电视机:void open(){"开始播放节目"}
风扇:void open(){"开始扇风"}
空调:void open(){"开始制冷"}
洗衣机:void open(){"开始洗衣服"}
实现多态的程序:
J* j = NULL; //声明父类的指针
D d; //子类创建对象
F f; //子类创建对象
K k; //子类创建对象
X x; //子类创建对象
j = &d; //父类的指针指向子类
//通过父类的指针调用子类对象的函数,也可写成 (*j).open();
j ->open(); //调用的是 :{"开始播放节目"}
j = &f; //父类的指针指向子类
j ->open(); //调用的是 :{"开始扇风"}
j = &k; //父类的指针指向子类
j ->open(); //调用的是 :{"开始制冷"}
j = &x; //父类的指针指向子类
j ->open(); //调用的是 :{"开始洗衣服"}
从上面的程序看,同样是j ->open();这么一句话,调用的却是不同的函数,这就是对多态的直观认识!
父类通过其指针指向子类,父类就能调用子类的函数(该函数,是子类继承父类的虚函数而来)。
可能,读者会说,这多态也没有什么优势啊,我用分别子类不是一样可以调用这些函数吗?
那么请读者再,回味一下“多态有助于实现拓展性和替换性。”这句话。
还有“继承是一种抽象,它允许程序员在某些时候忽略相似对象的差异,又在其他时候利用这些差异。”
这句话。
希望您看后也有所感悟!
对C++多态的一点理解的更多相关文章
- opencv笔记5:频域和空域的一点理解
		time:2015年10月06日 星期二 12时14分51秒 # opencv笔记5:频域和空域的一点理解 空间域和频率域 傅立叶变换是f(t)乘以正弦项的展开,正弦项的频率由u(其实是miu)的值决 ... 
- 对socket的一点理解笔记
		需要学web service,但是在视频中讲解到了socket套接字编程.以前貌似课上老师有提过,只是没用到也感觉乏味.现在遇到,自己看了些博客和资料.记录一点理解,不知正确与否. 首先说这个名字,叫 ... 
- iOS 的一点理解(一) 代理delegate
		做了一年的iOS,想记录自己对知识点的一点理解. 第一篇,想记录一下iOS中delegate(委托,也有人称作代理)的理解吧. 故名思议,delegate就是代理的含义, 一件事情自己不方便做,然后交 ... 
- 关于web开发的一点理解
		对于web开发上的一点理解 1 宏观上的一点理解 网页从请求第地址 到获得页面的过程:从客户端(浏览器)通过地址 从soket把请求报文封装发往服务端 服务端通过解析报文并处理报文最后把处理的结果 ... 
- angular.js的一点理解
		对angular.js的一点理解 2015-01-14 13:18 by MrGeorgeZhao, 317 阅读, 4 评论, 收藏, 编辑 最近一直在学习angular.js.不得不说和jquer ... 
- RxSwift 入坑好多天 - 终于有了一点理解
		一.前言 江湖上都在说现在就要赶紧学 swift 了,即将是 swift 的天下了.在 api 变化不大的情况下,swift 作为一门新的语言,集众家之所长,普通编码确实比 oc 要好用的多了 老早就 ... 
- rt-thread中动态内存分配之小内存管理模块方法的一点理解
		@2019-01-18 [小记] rt-thread中动态内存分配之小内存管理模块方法的一点理解 > 内存初始化后的布局示意 lfree指向内存空闲区首地址 /** * @ingroup Sys ... 
- rt-thread中软件定时器组件超时界限的一点理解
		@2019-01-15 [小记] 对 rt-thread 中的软件定时器组件中超时界限的一点理解 rt_thread_timer_entry(void *parameter)函数中if ((next_ ... 
- mycat的schema.xml的个人的一点理解
		官方文档里讲的详细的部分的我就不再赘述了,我只是谈谈我自己的理解 刚开始接触mycat,最重要的几个配置文件有server.xml,schema.xml,还有个rule.xml配置文件 具体都是干啥用 ... 
随机推荐
- Android逆向 Android平台虚拟机
			一 Dalvik:是Google开发运行在Android平台的Java虚拟机, Android程序编译后会生成dex文件.Dalvik虚拟机下运行Java时,要将字节码通过即时编译器(just in ... 
- Java语言的特点以及Java与C/C++的异同
			Java语言的特点 1. Java为纯面向对象的语言,能够直接反应现实生活中的对象,容易理解,编程更容易. 2.跨平台,java是解释性语言,编译器会把java代码变成中间代码,然后在JVM上解释执行 ... 
- [Objective-C] id类型和instancetype类型
			前些时间在源码里看到instancetype返回类型,一脸惊异,表示接触iOS不久没见过这东西,但发现跟id功能差不多.故查了一些资料,了解了两者之间的区别,故将资料简单翻译整理了一下,为博客充一个数 ... 
- IIS下众多网站,如何快速定位某站点日志在哪个文件夹?
			windows2008,iis 多站点, 日志.应用程序池都是默认设置, 没有分开………… Logs目录里面有W3SVC43,W3SVC44,W3SVC45,W3SVC46.....等等日志文件夹. ... 
- NetBeans 打开项目中文乱码最简单的解决办法
			网上各种修改配置文件,中文乱码还是没有解决,其实不是NetBeans的问题,是编辑器设置的字符集不支持中文,最简单的办法:!!! 设置新字体即可 !!! 
- python 元组编码和解码问题
			先看一个例子: (u'agentEnum', True, '200', {u'msg': u'\u6210\u529f', u'code': 1}) 在2.7.15版本中,如果有下面代码: def f ... 
- HDFS hflush hsync和close的区别
			HDFS的hflush,hsync和close有啥区别,分别做了什么 hflush: 语义是保证flush的数据被新的reader读到,但是不保证数据被datanode持久化. hsync: 与hfl ... 
- InfoPath读取数据库
			public void LoadBtn_Clicked(object sender, ClickedEventArgs e) { // 配置连接字符串 using (SqlConnection con ... 
- Qt: QSqlRecord字段值为null时注意事项
			QSqlRecord在对应字段值为null时,QSqlRecord::value返回的QVariant是有效但为null(相当于使用QVariant(Type type)构造的),所以此时做对应类型的 ... 
- 过滤掉URL中的参数部分
			//将超链接的参数部分滤掉 ?xxx if(url.contains("?")){ url=url.substring(0,url.indexOf("?")); ... 
