准备知识

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

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

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

#include <iostream>
using namespace std; class CTradesPerson{ // base class
public :
virtual void sayHi(){ cout<<"Just hi."<<endl;}
}; class CTinker : public CTradesPerson{// drived class 1
public :
virtual void sayHi(){cout<<"Hi, I tinker."<<endl;}
}; class CTailor : public CTradesPerson{// drived class 2
public:
virtual void sayHi(){ cout<<"Hi, i tailor"<<endl;}
}; int main(){
CTradesPerson* p; // pointer to base class
int which ; // prompt user for a number
//*** 1 ==CTadesPerson
// 2 ==CTinker
// 3 ==CTailor
do{
cout <<"1 == CTradesPerson, 2 == CTinker, 3 == CTailor"<<endl;
cin >>which;
}while(which<1||which>3); //set pointer p depending on user choice
switch(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 pointer
p->sayHi(); // ***runt-time binding in effect
delete p; // *** free the dymanicall y allocated storage
return 0;
}

程序清单说明

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

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

測试数据

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

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

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc29uZ3ppdGVh/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />

关于Program Language很多其它讨论与交流。敬请关注本博客和新浪微博songzi_tea.

程序基石系列之C++多态的前提条件的更多相关文章

  1. 黑马程序员——JAVA基础之多态与Object

    ------- android培训.java培训.期待与您交流! ----------  多态 : 多态定义:  某一类事物的多种存在形态. 多态的体现: 父类的引用指向了自己的子类对象.       ...

  2. 黑马程序员_Java面向对象3_多态

    5.面向对象_多态 多态定义:某一种事物存在的多种形态. 例:动物中猫,狗. 猫这个对象对应的类型是猫类型. 猫 x = new 猫(); 同时猫也是动物的一种,也可以把猫称为动物. 动物 y = n ...

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

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

  4. 【微信小程序开发•系列文章六】生命周期和路由

    这篇文章理论的知识比较多一些,都是个人观点,描述有失妥当的地方希望读者指出. [微信小程序开发•系列文章一]入门 [微信小程序开发•系列文章二]视图层 [微信小程序开发•系列文章三]数据层 [微信小程 ...

  5. ASP.NET4.5Web API及非同步程序开发系列3

    ASP.NET4.5Web API及非同步程序开发系列(3) 接着上一篇博客的内容做一个补充,正好是一个大哥提出来的,我们看看一个有趣的现象. 请求相关问题的补充: 我们先在Controller中的定 ...

  6. ASP.NET4.5Web API及非同步程序开发系列

    ASP.NET4.5Web API及非同步程序开发系列 认识ASP.NET WEB API 他的前身为WCF WEB API用于协助WCF支持RestFul.现在集成进ASP.NET,正式更名为ASP ...

  7. 微信小程序之微信登陆 —— 微信小程序教程系列(20)

    简介: 微信登陆,在新建一个微信小程序Hello World项目的时候,就可以看到项目中出现了我们的微信头像,其实这个Hello World项目,就有一个简化版的微信登陆.只不过是,还没有写入到咱们自 ...

  8. Windbg程序调试系列5-高CPU问题分析

    上篇博客中给大家分享了使用Windbg进行Live Debugging: Windbg程序调试系列4-Live Debugging 本篇中我们继续,跟大家分享常见的应用程序高CPU使用率问题分析. 先 ...

  9. Windbg程序调试系列4-Live Debugging

    上篇博文中给大家分享了使用Windbg分析线程阻塞问题: Windbg程序调试系列3-线程阻塞问题 本篇中我们继续,跟大家分享附加进程实时调试-Live Debugging. 先说一下使用Windbg ...

随机推荐

  1. uva 103 Stacking Boxes(最长上升子序列)

    Description    Stacking Boxes  Background Some concepts in Mathematics and Computer Science are simp ...

  2. javaweb学习总结(十)——HttpServletRequest对象(一)(转)

    (每天都会更新至少一篇以上,有兴趣的可以关注)转载自孤傲苍狼 一.HttpServletRequest介绍 HttpServletRequest对象代表客户端的请求,当客户端通过HTTP协议访问服务器 ...

  3. POJ3671 Dining Cows

    Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 8126   Accepted: 3441 Description The c ...

  4. invoke反射

    mark一下使用用法,原理以后在搞: 无参数: import java.text.SimpleDateFormat; import java.util.Date; import java.lang.r ...

  5. Requery,Refresh,Adoquery.Close,Open 区别

    经过测试发现: Requery 相当于 Adq.Close,Open:并且比Close,Open方法有个优点就是不丢失排序,Sort Adq.Close,Open 后,原来的 Adq.Sort 会丢失 ...

  6. Python初见

    参考资料:http://wenku.baidu.com/link?url=_akpT-G5Tvf7ECyszSipOAhHXzjlpYu-RWPcRTYp_tecPOollPGUxXG4MH69MLN ...

  7. Win10下安装Docker及tensorflow(cpu版)

    1.准备工作: 1)64为操作系统,win7或者更高 2)支持“ Hardware Virtualization Technology”,并且,“virtualization ”可用(可进入任务管理器 ...

  8. 备份MySQL数据库的方法

    前言 我们试着想一想, 在生产环境中什么最重要?如果我们服务器的硬件坏了可以维修或者换新, 软件问题可以修复或重新安装, 但是如果数据没了呢?这可能是最恐怖的事情了吧, 我感觉在生产环境中应该没有什么 ...

  9. Latex algorithm

    方式一 需要包含的 \usepackage[noend]{algpseudocode} \usepackage{algorithmicx,algorithm} 源码 \begin{algorithm} ...

  10. L1-5. A除以B【一种输出格式错了,务必看清楚输入输出】

    L1-5. A除以B 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 真的是简单题哈 —— 给定两个绝对值不超过100的整数A和 ...