程序基石系列之C++多态的前提条件
2017-05-23 20:25 tlnshuju 阅读(276) 评论(0) 收藏 举报准备知识
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, 就会得到例如以下结果:
关于Program Language很多其它讨论与交流。敬请关注本博客和新浪微博songzi_tea.
浙公网安备 33010602011771号