程序基石系列之C++多态的前提条件
准备知识
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)有继承关系. (2)有方法的重写. (3)有父类引用指向之类对象. 备注:这是多态的三大要素,其实多态的前提条件只要(1)和(3)就行,但是教科书上都这 ...
- 说说多态是什么,多态的前提条件是什么?
多态的体现是父类引用变量可以指向子类对象,在使用多态后的父类引用变量调用方法时,会调用子类重写后的方法;多态的前提条件是有子父类关系或者类实现接口的关系.
- Java 中多态的概念以及前提条件
多态的概念 * 一个事物在不同时刻的体现(堆内存中对象形式) * 多态的前提条件: * 1)必须有继承关系(继承的好处第三点作为多态的前提条件) * 如果没有继承谈不上多态 * 2) ...
- 【高效程序员系列】3、别碰鼠标——让键盘飞起来
看到文章标题,你肯定会很奇怪,为什么"别碰鼠标",离开鼠标还怎么操作电脑?"让键盘飞起来",键盘怎么会飞呢?你可以保留这些疑问,先跟着我的描述操作一遍,注意操作 ...
- 漫谈程序员系列:程序员该不该考虑初创公司
IT 这个行业,最不缺的就是机会,追逐机会的,有各种各样的小公司,也有各种种样的程序员. 创业公司 每一个出来创业的人,心中都充满了希望和梦想,而且认为自己眼光独到,手段高超,一定能够逐浪潮头. 可是 ...
- 【转】漫谈程序员系列 看看你离优秀有多远
转自:https://blog.csdn.net/foruok/article/details/40075201 分享一下我老师大神的人工智能教程!零基础,通俗易懂!https://www.capta ...
- 漫谈程序员系列 看看你离优秀有多远
前段时间(大概是8月份吧)我终于拿到了驾照,科目一.科目二.科目三.科目四都是一次性过的,没有给教练塞钱也没有给教练递烟.考科目三(路考)时,有个女生没能通过还被陪考员讽刺,伤心地哭了,梨花带雨让人心 ...
- 漫谈程序猿系列:看看你离优秀有多远
前段时间(大概是8月份吧)我最终拿到了驾照,科目一.科目二.科目三.科目四都是一次性过的,没有给教练塞钱也没有给教练递烟.考科目三(路考)时,有个女生没能通过还被陪考员讽刺,伤心地哭了,梨花带雨让人心 ...
- 漫谈程序员系列:3D打印能打印出程序猿吗
首先声明,本文是一本正经的胡扯,绝不是随随便便的胡扯,请您不要随便攻击我胡说八道,我要重复星爷在<喜剧之王>里的台词:其实,我是一本正经的喷子. 3D打印的定义 关于3D打印,下面是来自百 ...
最新文章
- TCP/IP 协议理解
- (转载)(c#)数据结构与算法分析 --数组、向量和表
- pytorch Flatten展平
- SliverLight注册字典转换器方法
- IDEA发布运行web项目(曾经遇到的项目启动报404)
- Spring Bean 作用域之间的区别?
- PS图像菜单下计算命令
- Android 的Android Device Monitor 打不开出现 A error has occured
- phpstorm如何同时打开两个文件夹_iPhone如何同时添加两个不同的面容ID?
- 雨巷(A Lane in the Rain)
- iptables 开放端口
- python默认编码有什么用_Python2.7.8的默认编码是什么?
- Bitmap-把方形图片处理为圆形
- 【Android】Gallery实现选中图片变大,两侧没选中图片变小
- 一个留学中介的CRM案例
- django线上环境配置
- web哪里有php文件,web文件管理器
- 模拟电路设计(34)---脉宽调制型开关电路
- oracle显示上午下午,Oracle实现使用时间函数实现输出“上午好/...
- Python 注册表作业制作