电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本
换一换
首页 金锄头文库 > 资源分类 > PPT文档下载
分享到微信 分享到微博 分享到QQ空间

C++面向对象程序设计 教学课件 ppt 作者 陈维兴 陈昕 C++邮电-8

  • 资源ID:89343032       资源大小:335KB        全文页数:28页
  • 资源格式: PPT        下载积分:10金贝
快捷下载 游客一键下载
账号登录下载
微信登录下载
三方登录下载: 微信开放平台登录   支付宝登录   QQ登录  
二维码
微信扫一扫登录
下载资源需要10金贝
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
如填写123,账号就是123,密码也是123。
支付方式: 支付宝    微信支付   
验证码:   换一换

 
账号:
密码:
验证码:   换一换
  忘记密码?
    
1、金锄头文库是“C2C”交易模式,即卖家上传的文档直接由买家下载,本站只是中间服务平台,本站所有文档下载所得的收益全部归上传人(卖家)所有,作为网络服务商,若您的权利被侵害请及时联系右侧客服;
2、如你看到网页展示的文档有jinchutou.com水印,是因预览和防盗链等技术需要对部份页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有jinchutou.com水印标识,下载后原文更清晰;
3、所有的PPT和DOC文档都被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;下载前须认真查看,确认无误后再购买;
4、文档大部份都是可以预览的,金锄头文库作为内容存储提供商,无法对各卖家所售文档的真实性、完整性、准确性以及专业性等问题提供审核和保证,请慎重购买;
5、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据;
6、如果您还有什么不清楚的或需要我们协助,可以点击右侧栏的客服。
下载须知 | 常见问题汇总

C++面向对象程序设计 教学课件 ppt 作者 陈维兴 陈昕 C++邮电-8

,第8章 模 板 8.1 模板的概念 8.2 函数模板 8.3 类模板,本章主要内容,8.1 模板的概念 定义求最大值函数max(): int max(int x,int y) return (xy)?xy; float max(float x,float y) return (xy)?xy; double max(double x,double y) return (xy)?xy;,这些函数的功能都是相同的,只是参数类型和函数返回类型不同,问题:能否将这些函数合起来,只写一个通用函数呢?,解决这个问题的方法: 使用模板 模板是实现代码重用机制的一种工具, 它把类型定义为参数,实现类型参数化。 调用时,T 可以分别取为int 、float 、double,把类型定义为参数,如下所示: T max(T x,T y) return (xy)?xy; ,类型参数,int max(int x,int y) return (xy)?xy; float max(float x,float y) return (xy)?xy; double max(double x,double y) return (xy)?xy;,把类型定义为参数,如下所示: T max(T x,T y) return (xy)?xy; ,类型参数,调用时,T取int,调用时,T取float,调用时,T取double,函数模板 模板 类 模 板,8.2 函数模板 8.2.1 函数模板的声明 函数模板可声明如下: 函数模板也可以定义成如下形式:,template 返回类型 函数名(模板形参表) 函数体 ,使用函数模板时, 类型参数必须实例化,即用实际的数据类型替代它。,template是一个声明模板的关键字,它表示声明一个模板。,template 返回类型 函数名(模板形参表) 函数体 ,例如,求最大值函数模板,如下所示: template T max(T x,T y) return (xy)?xy; 也可以定义成如下形式: template T max(T x,T y) return (xy)?xy;,T为类型参数,模板形参表,8.2.2 函数模板的使用 函数模板代表的是一类函数,使用时,类型参数必须实例化,即用实际的数据类型(既可以是系统预定义的标准数据类型(int 、float 、double等), 也可以是用户自定义的类型)替代它。 将函数模板中的类型参数实例化的参数称为模板实参。 用模板实参实例化的函数称为模板函数。 当编译系统发现有一个函数调用: 函数名(模板实参表); 时,将根据模板实参表中的类型生成一个函数即模板函数。该模板函数的函数体与函数模板的函数体相同。,#include /例8.1 函数模板的使用。 using namespace std; template /模板声明,其中T为类型参数 T max(T a,T b) /定义函数模板,“T a,T b”为模板形参表 return (ab) ? a:b; int main() int i1=10, i2=56; double d1=50.344, d2=4656.346; char c1='k',c2='n' cout“较大的整数是:“max(i1,i2)endl; cout“较大的双精度型数是:“max(d1,d2)endl; cout“较大的字符是:“max(c1,c2)endl; return 0; ,类型参数T 将分别被类型int 、float 、double、char等取代,调用函数模板,此时T被char取代,调用函数模板,此时T被double取代,调用函数模板,此时T被char取代,运行结果如下: 较大的整数是:56 较大的双精度型数是:4656.35 较大的字符是:n,可见:所谓函数模板,实际上是建立一个通用函数,其函数返回类型和形参类型不具体指定,用一个虚拟的类型来代表。函数模板经实例化而生成的具体函数称为模板函数。 函数模板代表了一类函数, 模板函数表示某一具体的函数。,说明: (1) 在函数模板中允许使用多个类型参数。但是应当注意template定义部分的每个类型参数前必须有关键字typename (或class )。 例8.3-1 建立了有两个类型参数的函数模板。 #include using namespace std; template void myfunc( type1 x, type2 y) coutx yendl; main() myfunc(10, “hao“); myfunc(0.123, 10L); return 0;,两个类型参数type1和type2,运行结果为: 10 hao 0.123 10,(2) 在template语句与函数模板定义语句之间不允许有别的语句。 例如下面的程序段就不能编译。 template int i; /错误 T max( T x,T y ) return ( xy)?xy; (3) 模板函数类似于普通重载函数,但更严格一些。 普通的非模板函数被重载的时候,在每个函数体内可以执行不同的动作。 但同一函数模板实例化后的所有模板函数都必须执行相同的动作。,(3) 模板函数类似于普通重载函数,但更严格一些。 普通的非模板函数被重载的时候,在每个函数体内可以执行不同的动作。 但同一函数模板实例化后的所有模板函数都必须执行相同的动作。 例如,下面的重载函数就不能用模板函数代替: 函数1: void outdate(int i) couti; 函数2: void outdata(double d) coutd=dendl; 因为它们所执行的动作是不同的。,(4) 同一般函数一样,函数模板也可以重载。 #include /例8.3-1 template Type max(Type x,Type y) return (xy)?x:y; template Type max(Type x,Type y,Type z) Type t; t=(xy)? x:y; return(tz)?t:z; main( ) int m=10, n=20, max2; float a=10.1, b=20.2, c=30.3, max3; max2=max(m,n); max3=max(a,b,c); cout“max(“m“,“n“)=“max2endl; cout“max(“a“,“b“,“c“)=“max3endl; return 0; ,函数模板重载,运行结果: max(10,20)=20 max(10.1,20.2,30.3)=30.3,(5) 函数模板与同名的非模板函数可以重载。在这种情况下,调用的顺序是: 首先寻找一个参数完全匹配的非模板函数,如果找到了就调用它; 若没有找到,则寻找函数模板,将其实例化,产生一个匹配的模板函数,若找到了,就调用它。,#include /例8.4-1 函数模板与非模板函数重载举例。 using namespace std; template /模板声明,其中AT为类型参数 AT max(AT x,AT y) /定义函数模板 couty)? x:y; int max(int x,int y) /定义非模板函数max,与函数模板max重载 couty) ? x:y; int main() int i1=10, i2=56; double d1=50.34, d2=4656.34; cout“较大的整数是:“max(i1,i2)endl; cout“较大的双精度型数是:“max(d1,d2)endl; return 0; ,调用模板函数, 此时AT被double替代,调用非模板函数,#include /例8.4-1 函数模板与非模板函数重载举例。 using namespace std; template AT max(AT x,AT y) couty)? x:y; int max(int x,int y) /定义非模板函数max, 与函数模板max重载 couty) ? x:y; int main() int i1=10, i2=56; double d1=50.34, d2=4656.34; cout“较大的整数是:“max(i1,i2)endl; cout“较大的双精度型数是:“max(d1,d2)endl; return 0; ,程序运行结果为: 调用非模板函数:较大的整数是:56 调用模板函数:较大的双精度型数是:4656.34,8.3 类模板 所谓类模板,实际上是建立一个通用类,其数据成员、成员函数的返回类型和形参类型不具体指定,用一个虚拟的类型来代表。 使用类模板定义对象时,系统会根据实参的类型(模板实参)来取代类模板中虚拟类型从而实现了不同类的功能。,定义一个类模板,格式如下: 或,template class 类名 类成员声明 ;,template class 类名 类成员声明 ;,template是一个声明模板的关键字,Type是类型参数,例如,建立一个用来实现求三个数之和的类模板。 template / 模板声明,其中T为类型参数 class Add_3 / 类模板名为Add_3 public: Add_3(T a,T b,T c) x=a; y=b; z=c; T sum() return x+y+z; private: T x,y,z; ;,类型参数,在类声明中,欲采用通用数据类型的数据成员、成员函数的参数或返回类型前面需加上T。,用类模板定义对象时,采用以下形式: 使用上面求三个数之和的类模板的主函数可写成: int main() Add_3 sum3_1(3,5,7); Add_3 sum3_2(12.34,34.56,56.78); cout“三个数之和是:“ sum3_1.sum()endl; cout“三个数之和值是:“ sum3_2.sum()endl; return 0; ,类模板名 对象名; 类模板名 对象名(实参表列);,#include /例8.5 类模板Add_3的使用。 using namespace std; template / 模板声明,其中T为类型参数 class Add_3 / 类模板名为Add_3 public: Add_3(T a,T b,T c) x=a; y=b; z=c; T sum() return x+y+z; private: T x,y,z; ; int main() Add_3 sum3_1(3,5,7); Add_3 sum3_2(12.34,34.56,56.78); cout“三个整数之和是:“ sum3_1.sum()endl; cout“三个双精度数之和是:“ sum3_2.sum()endl; return 0; ,用类模板定义对象sum3_1,此时T被int替代,用类模板定义对象sum3_2,此时T被double替代,#include /例8.5 类模板Add_3的使用。 using namespace std; template / 模板声明,其中T为类型参数 class Add_3 / 类模板名为Add_3 public: Add_3(T a,T b,T c) x=a; y=b; z=c; T sum() return x+y+z; private: T x,y,z; ; int main() Add_3 sum3_1(3,5,7); Add_3 s

注意事项

本文(C++面向对象程序设计 教学课件 ppt 作者 陈维兴 陈昕 C++邮电-8)为本站会员(E****)主动上传,金锄头文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即阅读金锄头文库的“版权提示”【网址:https://www.jinchutou.com/h-59.html】,按提示上传提交保证函及证明材料,经审查核实后我们立即给予删除!

温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.