对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配置文件 具体都是干啥用 ...
随机推荐
- apktool逆向apk包
在AndroidStudio创建so一节里创建了so,并且在java里面调用so的HelloWorld方法,编译Android Studio后生成包app-debug.apk. 在逆向apk时如果该a ...
- [iOS] 列表滑动展开隐藏头部HeaderView
平常遇到大多数的带有列表的应用都会遇到这个场景:在列表顶端有一个Header,当向上滑动列表时,压缩header,向下滑动列表到头时,展开header.这种样式在例如微博,twitter这些展示动态的 ...
- Python+Selenium笔记(十四)鼠标与键盘事件
(一) 前言 Webdriver高级应用的API,允许我们模拟简单到复杂的键盘和鼠标事件,如拖拽操作.快捷键组合.长按以及鼠标右键操作,都是通过使用webdriver的Python API 中的Ac ...
- innodb 表锁和行锁
表锁 表锁相关结构: table->locks:数据字典table保存这个表上的所有表锁信息 trx->lock.table_locks:每个事务trx保存该事务所加的所有表锁信息 tr ...
- IP地址的分类——a,b,c 类是如何划分的【转】
ip分类已经是耳熟能详了.但是说的都比较繁琐,这里简述一下,便于以后复习. IP地址,一共分成了5类,范围分别如下: A类IP:从0.0.0.0 – 127.255.255.255,共有1677721 ...
- 俄罗斯方块(JS+CSS)
这是一个用 js + css 写的网页版俄罗斯方块. 具体代码与示例可访问我的另一个博客查看,源码与示例.
- 清理 Xcode 10
1,清理 ~/Library/Developer/CoreSimulator/Devices说明:该目录存放当前的所有模拟器,每个标识符代表一台机器,清理掉避免存在旧版本的模拟器缓存 执行: 关闭模拟 ...
- 团队作业——Alpha冲刺 8/12
团队作业--Alpha冲刺 冲刺任务安排 杨光海天 今日任务:将编辑界面与其中字体设置的弹窗合并,学习Android控件交互. 明日任务:希望完成编辑界面所有接口交互的功能. 郭剑南 今日任务:使用P ...
- SSL/TLS Diffie-Hellman Modulus <= 1024 位 (LogJam) 使用2048位或更高的Diffie-Hellman
1.http://slproweb.com/products/Win32OpenSSL.html 下载 SSL 并安装 2.设置环境变量,例如工具安装在C:\OpenSSL-Win64,则将C:\O ...
- PyQt5--GridLayout
# -*- coding:utf-8 -*- ''' Created on Sep 13, 2018 @author: SaShuangYiBing ''' import sys from PyQt5 ...