程序基石:C++多态的前提条件

准备知识

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

  • 必须存在一个继承体系结构.
  • 继承体系结构中的一些类必须具有同名的virtual成员函数(virtual关键字)
  • 至少有一个基类类型的指针或基类类型的引用.这个指针或引用可用来对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, 就会得到如下结果:

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

时间: 2024-10-10 11:42:18

程序基石:C++多态的前提条件的相关文章

黑马程序猿-面向对象-多态

---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Unity开发</a>.<a href="http://edu.csdn.net"target="blank">.Net培训</a>.期待与您交流! ---------------------- 一多态的前提:(1)要有继承关系(或

黑马程序员-面向对象-多态

---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Unity开发</a>.<a href="http://edu.csdn.net"target="blank">.Net培训</a>.期待与您交流! ---------------------- 一多态的前提:(1)要有继承关系(或

java foreach遍历的前提条件

自我总结,欢迎拍砖,不胜感激! 目的: 加深foreach遍历的影响 证明:foreach遍历的前提条件是:list !=null ,而不是:list !=null && list.size() >0 说明: jdk -version : 1.6 public static void main(String[] args) { List<String> list = null; // List<String> list = new ArrayList<S

关于Windows 数据库服务器更换为Linux 数据库服务器的前提条件

该前提条件就是: 请找应用软件开发商和运维人员确认: 第一:该Window数据库服务器 上是否安装有取数(或者说抽取数据)的应用软件.如果有,需要询问取数(或者说抽取数据)的应用软件在linux有无相应版本. 第二:该Window数据库服务器的硬件接口(USB,并口等等)是否接了加密狗之类的.如果有,需要询问应用软件开发商  加密狗在linux有无驱动程序.  此加密狗一般是应用软件的加密狗,用于防止应用软件的非授权使用.一般的应用软件都有技术上的授权机制(加密狗,序列号等等),防止你非法使用,

互联网+和创业潮,互联网+前提条件是什么?互联网+做什么?

在大众创业,万众创新的大浪下,凭着对新技术的敏感和青春激情,创业新军不断涌现.... 互联网+创业浪潮, 如雨后春笋......,互联网+渗透每个人的心中.创业不是赶时髦,而是一条非常孤独,艰难的路.实施“互联网+”战略的思路和工作重点进行专题研究,要求营造互联网企业自由生长的良好环境,统筹各方力量抢抓机遇.精准发力,推动“互联网+”战略今年在若干重点领域取得立竿见影的效果. 互联网+前提条件:增加企业产品的竞争力,降低成本,效率提高,才能成功!传统企业是做什么的?传统企业是创造价值的.互联网企

游戏开发中的心理学(一):认知失调有前提条件

 以下为第一篇:游戏中的心理学(一):认知失调 游戏业属于服务业,而我们服务的对象就是玩家.我们想要做好一款游戏,除了必要的专业知识,对服务对象的了解程度也非常重要. 笔者最近自学了一点心理学的皮毛,在这里尝试用心理学知识来分析玩家的心理和行为,今天先说说"认知失调理论". 认知失调会让玩家对体验差的游戏作出"好玩"的评价 "认知失调理论"是最让人诧异的理论,费斯廷格的这个理论是这样的:"当人们陷入一种很荒谬的情况时,他们就会想出一

Rman--使用的前提条件

################################# 使用rman的前提条件 ################################# 数据库处于归档模式 archivelog mount or open模式 (1)查看数据库是否是归档模式: SQL> archive log list Database log mode              No Archive Mode Automatic archival             Disabled Archive

转行自学编程的前提条件和能力

回顾自身转行自学 java 编程入行的经历总结参考如下: 前提条件: 对眼下的工作.生活状态的极度不满足: 有人指引大体方向,说明行业状况: 坚信可以通过自学一门技术或提高某种能力来改变眼下不满的工作.生活状态: 放得下过去,放得下身边的干扰: 静得下心学习: 有一定数学和英语基础. 能力: 找学习资料的能力和思维: 看资料的能力: 分析资料的能力: 模仿应用知识技术的能力: 总结反省的能力. ? Prerequisites: 1. Extreme dissatisfaction with th

安装爬虫 scrapy 框架前提条件

安装爬虫 scrapy 框架前提条件 (不然 会 报错) 1 pip install pypiwin32 原文地址:https://www.cnblogs.com/xmdykf/p/11374484.html