程序基石系列之C++多态的前提条件
2017-05-23 20:25
197 查看
准备知识
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.
相关文章推荐
- 程序基石系列之C++多态的前提条件
- 程序基石系列之C++运行时类型转换(Runtime Cast)
- 深入C/C++系列:C/C++程序中的堆与栈
- 程序员的自我修养: 程序运行的基石-C/C++运行库
- 程序基石系列之自动调用析函数
- C++面向对象编程——条件查询程序
- CORBA技术系列一:JAVA客户程序与C++服务程序互操作
- PKU C++程序设计实习 学习笔记3 多态与虚函数
- C++程序设计实践学材系列(4)——1.1 写出第一个C++程序
- C++程序设计实践学材系列(5)——1.1.1 观摩一个C++程序
- 如何在程序中加载各个模块(也谈C++多态的威力)
- C++中虚函数和多态的理解和测试程序
- 为什么C++(中文版——感谢waterwalk翻译) -刘未鹏程序语言系列
- 为什么C++(中文版——感谢waterwalk翻译) -刘未鹏程序语言系列
- 程序基石系列之拷贝构造
- 详解Node.js API系列C/C++ Addons(3) 程序实例
- 【处理器体系架构系列】基于TI C6000系列DSP的C/C++程序优化技术
- C02-程序设计基础提高班(C++)第13周上机任务-多态与虚函数
- Exchange Server 2013 运维系列——运行邮件删除命令(search-mailbox)的前提条件
- C++多态的实现条件