准备知识

C++中多态(polymorphism)有以下三个前提条件:

  • 必须存在一个继承体系结构.
  • 继承体系结构中的一些类必须具有同名的virtual成员函数(virtual关键字)
  • 至少有一个基类类型的指针或基类类型的引用.这个指针或引用可用来对virtual成员函数进行调用.

程序清单:C++中多态(运时行期绑定)

#include <iostream>
using namespace std;class CTradesPerson{ // base classpublic :virtual void sayHi(){ cout<<"Just hi."<<endl;}
};class CTinker : public CTradesPerson{// drived class 1public :virtual void sayHi(){cout<<"Hi, I tinker."<<endl;}
};class CTailor : public CTradesPerson{// drived class 2public:virtual void sayHi(){ cout<<"Hi, i tailor"<<endl;}
};  int main(){CTradesPerson* p; // pointer to base classint which ;// prompt user for a number//*** 1 ==CTadesPerson//    2 ==CTinker//    3 ==CTailordo{cout <<"1 == CTradesPerson, 2 == CTinker, 3 == CTailor"<<endl;cin >>which;}while(which<1||which>3); //set pointer p depending on user choiceswitch(which){case 1: p = new CTradesPerson; break;case 2: p = new CTinker; break;case 3: p = new CTailor; break;}// invoke the sayHi method via the pointerp->sayHi(); // ***runt-time binding in effectdelete p; // *** free the dymanicall y allocated storagereturn 0;
}

程序清单说明

程序清单的程序阐明了多态及其三个前提条件:

  • 存在一个继承体系结构,CTradesPerson是基类,CTinker和CTailor是CTradesPerson的派生类.
  • 继承体系结构中有一个叫sayHi的虚成员函数,它在上述三个类中各自被定义一次,因此共有三个不同的定义(但函数名相同).
  • p是个基类类型的指针.在本程序清单中p的数据类型是CTradesPerson*. 指针p用来实施对虚成员函数sayHi的调用.

测试数据

在该程序的某次运行过程中,我们输入数据1,就会得到如下结果:

当我们输入数据3, 就会得到如下结果:

关于Program Language更多讨论与交流,敬请关注本博客和新浪微博songzi_tea.

程序基石系列之C++多态的前提条件相关推荐

  1. 面向对象简答题:多态的前提条件?

    多态的前提条件? 答:多态的前提条件是: (1)有继承关系. (2)有方法的重写. (3)有父类引用指向之类对象. 备注:这是多态的三大要素,其实多态的前提条件只要(1)和(3)就行,但是教科书上都这 ...

  2. 说说多态是什么,多态的前提条件是什么?

    多态的体现是父类引用变量可以指向子类对象,在使用多态后的父类引用变量调用方法时,会调用子类重写后的方法;多态的前提条件是有子父类关系或者类实现接口的关系.

  3. Java 中多态的概念以及前提条件

    多态的概念  * 一个事物在不同时刻的体现(堆内存中对象形式)  * 多态的前提条件:  * 1)必须有继承关系(继承的好处第三点作为多态的前提条件)  *     如果没有继承谈不上多态  * 2) ...

  4. 【高效程序员系列】3、别碰鼠标——让键盘飞起来

    看到文章标题,你肯定会很奇怪,为什么"别碰鼠标",离开鼠标还怎么操作电脑?"让键盘飞起来",键盘怎么会飞呢?你可以保留这些疑问,先跟着我的描述操作一遍,注意操作 ...

  5. 漫谈程序员系列:程序员该不该考虑初创公司

    IT 这个行业,最不缺的就是机会,追逐机会的,有各种各样的小公司,也有各种种样的程序员. 创业公司 每一个出来创业的人,心中都充满了希望和梦想,而且认为自己眼光独到,手段高超,一定能够逐浪潮头. 可是 ...

  6. 【转】漫谈程序员系列 看看你离优秀有多远

    转自:https://blog.csdn.net/foruok/article/details/40075201 分享一下我老师大神的人工智能教程!零基础,通俗易懂!https://www.capta ...

  7. 漫谈程序员系列 看看你离优秀有多远

    前段时间(大概是8月份吧)我终于拿到了驾照,科目一.科目二.科目三.科目四都是一次性过的,没有给教练塞钱也没有给教练递烟.考科目三(路考)时,有个女生没能通过还被陪考员讽刺,伤心地哭了,梨花带雨让人心 ...

  8. 漫谈程序猿系列:看看你离优秀有多远

    前段时间(大概是8月份吧)我最终拿到了驾照,科目一.科目二.科目三.科目四都是一次性过的,没有给教练塞钱也没有给教练递烟.考科目三(路考)时,有个女生没能通过还被陪考员讽刺,伤心地哭了,梨花带雨让人心 ...

  9. 漫谈程序员系列:3D打印能打印出程序猿吗

    首先声明,本文是一本正经的胡扯,绝不是随随便便的胡扯,请您不要随便攻击我胡说八道,我要重复星爷在<喜剧之王>里的台词:其实,我是一本正经的喷子. 3D打印的定义 关于3D打印,下面是来自百 ...

最新文章

  1. TCP/IP 协议理解
  2. (转载)(c#)数据结构与算法分析 --数组、向量和表
  3. pytorch Flatten展平
  4. SliverLight注册字典转换器方法
  5. IDEA发布运行web项目(曾经遇到的项目启动报404)
  6. Spring Bean 作用域之间的区别?
  7. PS图像菜单下计算命令
  8. Android 的Android Device Monitor 打不开出现 A error has occured
  9. phpstorm如何同时打开两个文件夹_iPhone如何同时添加两个不同的面容ID?
  10. 雨巷(A Lane in the Rain)
  11. iptables 开放端口
  12. python默认编码有什么用_Python2.7.8的默认编码是什么?
  13. Bitmap-把方形图片处理为圆形
  14. 【Android】Gallery实现选中图片变大,两侧没选中图片变小
  15. 一个留学中介的CRM案例
  16. django线上环境配置
  17. web哪里有php文件,web文件管理器
  18. 模拟电路设计(34)---脉宽调制型开关电路
  19. oracle显示上午下午,Oracle实现使用时间函数实现输出“上午好/...
  20. Python 注册表作业制作

热门文章

  1. 9个不错的PDF搜索引擎
  2. 米家扫地机器人是石头代工_科沃斯投资研究报告 - 大湾区小家电分享
  3. 上海市一级计算机ps,上海市计算机一级考试ps部分练习题.docx
  4. 什么是计算机动画设计,什么是计算机动画制作
  5. VMware运行虚拟机卡慢等解决办法
  6. 解决sourcetree特别卡的问题
  7. 正则表达式 匹配任意长度的字符
  8. 超级任天堂模拟器 bsnes 开发者自杀(文末附模拟器及ROM)
  9. sourceTree使用详解
  10. 【Unity】Unity C#基础(十五)implicit 隐式类型转换、explicit 显式类型转换