设为首页 加入收藏

TOP

2014年计算机二级C++考点解析:模板
2014-10-26 19:30:03 来源: 作者: 【 】 浏览:55
Tags:2014年 计算机 二级 ++考点 解析 模板

  1 函数模板的概念、定义与应用


  函数模板是一系列相关函数的模型或样板,这些函数的源代码形式相同,只是所针对的数据类型不同。对于函数模板,数据类型本身成了它的参数,因而是一种参数化类型的函数。声明一个函数模板的格式是:


  template 模板形参表声明 函数声明


  其中的 模板形参表声明 是由一个或多个 模板形参 组成(如果是多个,需要用逗号隔开)。每个 模板形参 具有下面几种形式:


  (1)typename 参数名


  (2)class 参数名


  (3) 类型修饰 参数名


  这里的 参数名 可以是任意的标识符。在这三种形式中,前两种是等价的:在声明模板参数时,关键字typename与class可以互换。用typename或class声明的参数称为虚拟类型参数;而用 类型修饰 声明的参数则挑为常规参数,在形式上与普通的函数参数声明相同。格式中的 函数声明 与一般函数的声明类似,只是某些类型修饰符被虚拟类型参数所替代。


  2 模板实参的省略


  在调用一个模板函数时,编译系统需要足够的信息来判别每个虚拟类型参数所对应的实际类型,可以从两个不同的渠道获得这样的信息:从模板实参表(用 和 括起来的参数表)或从模板函数实参表(用(和)括起来的参数表),模板实参的信息优先于函数实参的信息。如果从后者获得的信息已经能够判定其中部分或全部虚拟类型参数所对应的实际参数,而且它们又正好是参数表中最后的若干参数,则模板实参表中的那几个参数可以省略。如果模板实参表中的实参都被省略了,则连空表 也可以不要。因此,若x和y都是unsigned型,则addTo unsigned (x,y,9)、addT (x、y、9)和addTo(x,y,9)三者是等价的。反之,对于某个模板实参,如果从模板函数的实参表中无法获得同样的信息,就不能省略;或者虽然能够获得同样的信息,但在它后面还有其他不能省略的实参,则其自身还是不能省略。


  下面列举几种模板实参不能省略的情况。


  (1)从模板函数实参表获得的信息矛盾。


  (2)需要获得特定类型的返回值,而不管参数的类型如何。


  (3)虚拟类型参数没有出现在模板函数的形参表中。


  (4)函数模板含有常规形参。


  3 函数模板的定制


  对不同的数据类型在处理形式上的统一性是建立模板的基础。但是,这种统一性是相对的,个别数据类型有可能比较特殊,在处理形式上与大多数数据类型不一致。针对这样的特殊情况,可以通过重载模板函数进行定制。这样把重载的模板称为补充模板,相应地,原模板则称为主模板。


  考后关注信息:


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇2014年计算机二级C++考点解析:C+.. 下一篇2014年计算机二级C++考点解析:运..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: