网站大量收购独家精品文档,联系QQ:2885784924

C++程序设计与数据结构基础:第7章 多态性和虚函数.ppt

C++程序设计与数据结构基础:第7章 多态性和虚函数.ppt

  1. 1、本文档共27页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* * * * * 第二部分 C++面向对象程序设计 第七章 多态性与虚函数 本章内容 ? 多态性概述 ? 运算符重载 ? 虚函数 * §7.1 多态性概述 多态性是面向对象程序设计的一个重要特征。 多态性(Polymorphism): 是指发出同样的消息被不同类型的对象接收时而导致不同的行为。(所谓发消息就是调用类中的成员函数。) 多态性的分类: 参数多态 包含多态 重载多态 强制多态 静态联编 动态联编 通用多态 专用多态 * 说明: 强制多态(coercion):编译程序通过语义操作,把操作对象的类型强行加以变换,以符合函数或操作符的要求。 例如:3.14+3/2; 强制类型转换(int)3.14+2 函数原型int f1(int); 函数调用 f1(3.14); 重载多态(overloading):同一个名(操作符﹑函数名)在不同的上下文中有不同的类型。 函数重载 运算符重载 int add(int x, int y) {return x+y;} double add(double x, double y) {return x+y;} coutadd(3, 4)endl; coutadd(3.4, 4.7)endl; * 参数多态( parametric ): 采用参数化模板,通过给出不同的类型参数,使得一个结构有多种类型。 #include iostream.h template class T //函数模板 T add(T *x, int n) { T s=0; for(int i=0;in;i++)s+=x[i]; return s; } void main() { int x[]={1, 2, 3, 4, 5}; double y[]={1.1, 2.2, 3.3, 4.4, 5.5}; cout整数相加结果:add(x, 5)\n; cout实数相加结果:add(y, 5)\n; } * class A { int Buffer[10]; public: A() { for(int k=0;k10;k++) Buffer[k]=0; } void SetElem(int i, int v); int GetElem(int i); }; void A::SetElem(int i, int v) { if(i=0 i10) Buffer[i]=v; else cout“下标越界\n; } int A::GetElem(int i) { if (i=0 i10) return Buffer[i]; else { cout下标越界\n; return 0; } } class B { double Buffer[5]; public: B() { for(int k=0;k5;k++) Buffer[k]=0; } void SetElem(int i, double v); double GetElem(int i); }; void B::SetElem(int i, double v) { if(i=0 i5) Buffer[i]=v; else cout“下标越界\n; } double B::GetElem(int i) { if (i=0 i5) return Buffer[i]; else { cout下标越界\n; return 0; } } templateclass T, int N //模板参数表 class A { double Buffer[N]; public: A(){ for(int k=0; kN; k++) Buffer[k]=0; } void SetElem(int i, T v); T GetElem(int i); }; templateclass T, int N void AT, N::SetElem(int i, T v) { if(i=0 iN)Buffer[i]=v; else cout 下标越界\n; } templateclass T, int N T

您可能关注的文档

文档评论(0)

学习让人进步 + 关注
实名认证
内容提供者

活到老,学到老!知识无价!

1亿VIP精品文档

相关文档