Visual C++基础教程课件:模板.pptVIP

Visual C++基础教程课件:模板.ppt

此“教育”领域文档为创作者个人分享资料,不作为权威性指导和指引,仅供参考
  1. 1、本文档共41页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

voidmain(){ inti=70,j=80; doublex=4.5,y=8.3; chara=x,b=y; coutoriginali,j:ijendl; swap(i,j); //生成模板函数voidswap(int,int) coutswappedi,j:ijendl; coutoriginalx,y:xyendl; swap(x,y); //生成模板函数voidswap(double,double) coutswappedx,y:xyendl; coutoriginala,b:abendl; swap(a,b); //生成模板函数voidswap(char,char) coutswappeda,b:abendl; coutoriginali,a:iaendl; swap(i,a); //正确,调用普通函数voidswap(int,char) coutswappedi,a:iaendl;}程序运行结果如下:originali,j:7080swappedi,j:8070originalx,y:4.58.3swappedx,y:8.34.5originala,b:xyswappeda,b:yxoriginali,a:80yoverloadedswapwappedi,a:121P用普通函数重载函数模板时,普通函数的参数可以与函数模板生成的模板函数不同。例如本例中,函数模板不可能生成模板函数voidswap(int,char);普通函数的参数也可以与生成的模板函数的参数相同,但此时,重载的普通函数失去了类型转换的功能。例如在例6.6中可以用函数intmax(int,int)对函数模板进行重载。由于函数模板Tmax(T,T)也可以生成模板函数intmax(int,int),因此,重载的普通函数不能进行参数类型的转换。在C++中,函数模板的调用与同名函数的调用方式相同,系统按如下顺序进行处理:(1)搜索程序中参数表与函数调用完全相同的函数,如果找到就调用它。(2)检查函数模板经实例化后是否有相匹配的模板函数,若有就调用它。(3)检查是否有函数可经参数的自动类型转换后实现参数匹配,若有则调用它。如果在以上三种情况下都没有找到匹配的函数,则按出错处理。6.2类模板函数模板只能定义非成员函数。使用类模板可以使得类中的某些数据成员和成员函数的参数及返回值取任意数据类型。例如,我们设计一个堆栈类,用来对某种数据类型的数据进行堆栈的操作。无论堆栈操作的数据是什么类型的值,它的操作方式都是相同的,只不过所操作的数据的类型不同。这时,就可以将要操作数据的类型进行参数化,定义一个类模板。类模板定义的格式如下: templateclass类型参数 class类名 { //类的说明部分 };例如,下面是一个简单类模板的示例。templateclassTclassMyClass{ private: Tx; public: voidSetX(Ta) { x=a; } TGetX() { returnx; }};上面定义的类模板中,所有成员函数的定义都在类模板的说明部分。如果在类的实现部分定义成员函数,则应使用以下形式: templateclass类型参数 函数返回类型类名类型参数::函数名(参数表) { 函数体 }其中,函数的返回类型、参数表中参数的类型和函数体类变量的类型都可以是template后说明的“类型参数”。类模板不代表一个具体的类,而是代表一组类。当使用类模板定义对象时,系统用指定的数据类型代替类型参数,从而将类模板实例化为某个具体的类,这称为模板类。使用类模板定义对象的格式如下: 类名类型实参对象名;其中,“类型实参”是任何已存在的数据类型,如果类模板带有多个类型参数,则必须为每一个类型参数指定相应的类型实参。模板模板6.1函数模板6.2类模板习题6.1函数模板在程序设计中经常会出现这样的情况:多个函数的参数个数相同,函数的代码(功能)也相同,但是它所处理的数据的类型不相同。对于这种情况,我们可以使用函数的重载定义多个函数名相同的函数。但即使是设计为重载函数也只是使用相同的函数名,函数体仍然需要分别定义。例如,第2章例2.17中对求绝对值函数的重载,三

文档评论(0)

ning2021 + 关注
实名认证
文档贡献者

中医资格证持证人

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

领域认证该用户于2023年05月10日上传了中医资格证

1亿VIP精品文档

相关文档