第八章 程序设计多态性.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第八章 程序设计多态性

程序设计基础 第八章 多态性 §8.1 多态性的基本概念 §8.1.1 程序的多态性 多态性:在程序中同一符号或名字在不同情况下具有不同解释 如:运算符 / * 多态性的两种最基本形式 编译时多态性:指在程序编译阶段即可确定下来的多态性 由重载机制实现: 函数重载 运算符重载 运行时多态性:指必须等到程序动态运行时才可确定的多态性 由继承结合虚函数的动态绑定实现 §8.1.2 多态性的作用——表示独立性 表示独立性:程序的表示形式与所表示的内容无关 真正灵活的、可维护的程序结构应当具有表示独立性。 查表table中某个元素element,考虑表的不同实现: if (table的类型为A) 调用A版本的search(); else if (table的类型为B) 调用B版本的search(); else if … 期望用统一的方式:result=table.search(element) 同一接口,不同实现 §8.2 函数重载 8.2.1 函数重载的方法 函数重载:同一作用域中允许多个函数使用同一函数名,但函数原型的形式参数的个数或者对应位置的类型不同 C语言不支持函数重载,所以每一个函数必须具有唯一的名字 例:求绝对值 int abs(int); 整型 long labs(long); 长整型 float fabs(float); 浮点型 C++的函数重载:编译程序根据实际参数的个数与相应位置的类型选择调用哪一个版本的重载函数 例8.2.1 #include iostream.h? int abs(int x) // 整数类型数据的绝对值函数 { cout Using integer version of abs().\n; return (x = 0 ? x : -x); }? double abs(double x) // 浮点类型数据的绝对值函数 { cout Using floating-point version of abs().\n; return (x = 0.0 ? x : -x); }? long abs(long x) // 长整数类型数据的绝对值函数 { cout Using long integer version of abs().\n; return (x = 0 ? x : -x); }? int main() { cout abs(-5) \n; // 调用abs()的整数版本 cout abs(-5L) \n; // 调用abs()的长整数版本 cout abs(3.14) \n; // 调用abs()的浮点版本 return 0; } 例8.2.2 // 程序:PRT_ADD.CPP #include iostream.h #include string.h void print_add(int a, int b) { couta+b=(a+b)endl; return; } void print_add(char *a, char *b) { char *result; result=new char[strlen(a)+strlen(b)+1]; strcpy(result,a); strcat(result,b); couta+b=resultendl; delete []result; return; } 例8.2.2 int main() { int a1=1,b1=2; char *a2=I am, *b2= a student.; print_add(a1,b1); print_add(a2,b2); return 0; } 8.2.2 函数重载的注意事项 函数返回值类型不能用于区分重载 例: int fun(int); double fun(int); 不是重载函数 用typedef声明的类型不能用于区分重载 例: typedef double MONEY; double calculate(double income); MONEY calculate(MONEY income); 不是重载函数 不同参数传递方式不能用于区分重载 例: void fun(int); void fun(int ); 不是重载函数 8.2.3 函数重载的二义性 函数重载的二义性:C++编译程序无法在多个重载函数中选择正确的函数进行调用。 函数调用时,编译程序选择重载函数的原则:如果函数调用的实际参

文档评论(0)

skvdnd51 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档