作为一个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++多态的一点理解的更多相关文章

  1. opencv笔记5:频域和空域的一点理解

    time:2015年10月06日 星期二 12时14分51秒 # opencv笔记5:频域和空域的一点理解 空间域和频率域 傅立叶变换是f(t)乘以正弦项的展开,正弦项的频率由u(其实是miu)的值决 ...

  2. 对socket的一点理解笔记

    需要学web service,但是在视频中讲解到了socket套接字编程.以前貌似课上老师有提过,只是没用到也感觉乏味.现在遇到,自己看了些博客和资料.记录一点理解,不知正确与否. 首先说这个名字,叫 ...

  3. iOS 的一点理解(一) 代理delegate

    做了一年的iOS,想记录自己对知识点的一点理解. 第一篇,想记录一下iOS中delegate(委托,也有人称作代理)的理解吧. 故名思议,delegate就是代理的含义, 一件事情自己不方便做,然后交 ...

  4. 关于web开发的一点理解

    对于web开发上的一点理解 1 宏观上的一点理解 网页从请求第地址 到获得页面的过程:从客户端(浏览器)通过地址 从soket把请求报文封装发往服务端   服务端通过解析报文并处理报文最后把处理的结果 ...

  5. angular.js的一点理解

    对angular.js的一点理解 2015-01-14 13:18 by MrGeorgeZhao, 317 阅读, 4 评论, 收藏, 编辑 最近一直在学习angular.js.不得不说和jquer ...

  6. RxSwift 入坑好多天 - 终于有了一点理解

    一.前言 江湖上都在说现在就要赶紧学 swift 了,即将是 swift 的天下了.在 api 变化不大的情况下,swift 作为一门新的语言,集众家之所长,普通编码确实比 oc 要好用的多了 老早就 ...

  7. rt-thread中动态内存分配之小内存管理模块方法的一点理解

    @2019-01-18 [小记] rt-thread中动态内存分配之小内存管理模块方法的一点理解 > 内存初始化后的布局示意 lfree指向内存空闲区首地址 /** * @ingroup Sys ...

  8. rt-thread中软件定时器组件超时界限的一点理解

    @2019-01-15 [小记] 对 rt-thread 中的软件定时器组件中超时界限的一点理解 rt_thread_timer_entry(void *parameter)函数中if ((next_ ...

  9. mycat的schema.xml的个人的一点理解

    官方文档里讲的详细的部分的我就不再赘述了,我只是谈谈我自己的理解 刚开始接触mycat,最重要的几个配置文件有server.xml,schema.xml,还有个rule.xml配置文件 具体都是干啥用 ...

随机推荐

  1. DOS中的ECHO命令详解

    1. 作为控制批处理命令在执行时是否显示命令行自身的开关  格式:ECHO [ON|OFF]  如果想关闭“ECHO OFF”命令行自身的显示,则需要在该命令行前加上“@”.  2. 显示当前ECHO ...

  2. 004-React-Native--多图选择上传

    参考资料:http://www.jianshu.com/p/488e62ed9656 一:使用react-native-image-crop-picker进行图片选择时,并没有提供多图的机制.当你从相 ...

  3. UIButton vs UIEventListener 事件处理

    NGUI的事件 在使用NGUI的事件处理时,发现UIButton和UIEventListener之间的共同点越来越多. 当然处理事件,也有一些其它的函数,比如:UIEventTrigger,Butto ...

  4. kettle性能优化

    普通开发电脑,如果没有网络查询步骤,kettle正常的速度应该在3000~20000条/秒.如果速度在2000条/秒一下,就可能需要调优. 性能优化的方式包括如下几种: 1.通过改变开始复制的数量(针 ...

  5. idea 断点上面有x

    背景:确定你的java代码没有问题,并且编译通过 问题:debug 启动项目的时候没有问题,idea打断点的时候左边红色断点上面有x 原因:java文件和class文件不一致, 解决方法:ant cl ...

  6. pycharm 中脚本执行的3种模式

    https://blog.csdn.net/chenmozhe22/article/details/81700504

  7. MySQL基础之 AUTO_INCREMENT

    AUTO_INCREMENT AUTO_INCREMENT是mysql唯一扩展的完整性约束,当为数据库表中插入新纪录时,字段上的值会自动生成唯一的ID,再具体设置AUTO_INCREMENT约束时,一 ...

  8. [BZOJ 3652]大新闻

    [BZOJ 3652] 大新闻 题意 随机从 \([0,n)\) 中选取一个整数 \(x\), 并从 \([0,n)\) 中再选取一个整数 \(y\). 有 \(p\) 的概率选取一个能令 \(x\o ...

  9. Spring boot整合Hive

    使用Spring boot整合Hive,在启动Spring boot项目时,报出异常: java.lang.NoSuchMethodError: org.eclipse.jetty.servlet.S ...

  10. 2-4 R语言基础 列表

    #列表list > l1 <- list("a",2,10L,3+4i,TRUE) #每个元素没有名字> l1[[1]][1] "a" [[2 ...