码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2014-10-31 20:46:18      阅读:221      评论:0      收藏:0      [点我收藏+]

标签:程序基石   多态   继承体系结构   虚函数   

准备知识

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,就会得到如下结果:

bubuko.com,布布扣

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

bubuko.com,布布扣


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

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

标签:程序基石   多态   继承体系结构   虚函数   

原文地址:http://blog.csdn.net/songzitea/article/details/40659327

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!