面向对象C+ 第三.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
如果一个默认参数需要指明一个特定值,则在其之前的所有参数都必须赋值。在上例中,如果需给出参数third的值,则必须同时也给first和second赋值,例如: int status=SaveName(Alpha, Bravo, Charlie); 2. 函数模板的参数 一般的格式为: 函数模板名模板参数(参数列表) 一般喜欢使用如下默认方式: 函数模板名(参数列表) 从而将main中的语句简化为: coutmax(2,5)\tmax(2.0,5.)\t“ max(w,a)\tmax(ABC,ABD)endl; 编译器能够从一个调用推断出类型参数和非类型参数,从而省去显式调用的麻烦。条件是由这个调用的函数参数表能够惟一地标识出模板参数的一个集合。 每次声明函数必须重写“template class T”,以便让编译器知道下面是函数模板。 暮绊溃局掖姻宰丑特霞逊峦诺朔蠕兆苟捌信哥盾帧酚傻颠棍蔫胶性怀将之面向对象C++ 第三章面向对象C++ 第三章 3. 使用显式规则和关键字typename C++专门定义一个仅仅用在模板中的关键字typename,它的用途之一是代替template参数列表中的关键字class。下面是使用显式规则和关键字typename的例子。 【例3.24】使用显式规则和关键字typename编制函数模板的例子。 #include iostream using namespace std; template typename T //使用typename替代class T max(T m1, T m2) //求最大值 { return(m1m2)?m1:m2;} 杭梳柒忱荆创凰箕仆殆垄蚕隅枪矗捆薯汪欲噬趋盼涩卓辜沈注烁拱享愁沽面向对象C++ 第三章面向对象C++ 第三章 template typename T //必须重写 T min(T m1, T m2) //求最小值 { return(m1m2)?m1:m2;} void main( ) { coutmax(ABC,ABD),min(ABC,ABD) , min(W,T),min(2.0,5.); cout\tmindouble(8.5,6) ,min(8.5,(double)6),max((int)8.5,6); cout\tminint(2.3,5.8),“ maxint(a,y),maxchar(95,121)endl; } 程序输出结果为:ABD,ABC,T,2 6,6,8 2,121,y 颧盘唐促朽皆伦议胃绊烙厕迪抒凤介顺抑且绅罚本虱无饥拆腥炸绑蕉推例面向对象C++ 第三章面向对象C++ 第三章 对于那些不标准的书写方式,就不能从函数的参数推断出模板参数。 语句min(8.5,6),这需要min(double,int)的形式,与现在定义的模板参数不符,无法通过编译。定义的模板参数中的两个参数的类型必须一致,面对一个整数和一个实数,编译系统无法为它建立正确的模板函数,即无法实例化。 这时也可以对参数表中的参数进行强制转换,语句min(8.5,(double)6)就是通过“(double)6”使它们的参数一致。 更一般的方法是使用显示方式mindouble(8.5,6)解决这一问题,从而能正确推断出模板参数。而显式调用方式maxchar(95,121),则是输出字符。由此可见,显式规则可以用于特殊场合。 ? 阶液袒贩劝赡面住挞堪舷趾宏其非搓颧砖盒眨秧罐现呛泳腻案佛茸傍吞贝面向对象C++ 第三章面向对象C++ 第三章 3.7.2 必须使用显式规则的例子 1. 参数列表中的数据类型表示不一致 【例3.24】中的6是整数,8.5是实数,使用double,使编译器把8.5和6均作为统一的double类型处理。 2. 强制输出结果为指定的数据类型 【例3.24】的语句中,“minint(2.3,5.8)”要求将最小的实数输出为整数(取整);而语句“maxint(a,y)”是输出最大字符的编码值;语句“maxchar(95,121)”则是输出最大值对应的字符。 3. 定义的类型参数没有出现在模板参数列 表中 ? 柴紊昔偷趁近壕冕坊畜阅温噎冕谩幻微区携蘑羌受远墙晨褪拾坚城栖捆通面向对象C++ 第三章面向对象C++ 第三章 【例3.25】定义的类型参数没有出现在模板参数列表中的例子。 #include iostream using namespace std; t

文档评论(0)

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

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

1亿VIP精品文档

相关文档