转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 网络书斋 >> 正文
第9章 模板考点归纳         ★★★

《计算机二级C++考试辅导资料大全》之“第9章 模板考点归纳”篇

作者:闵涛 文章来源:闵涛的学习笔记 点击数:2821 更新时间:2007/10/4 17:07:27
     9.1 函数模板
     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函数模板的定制
     对不同的数据类型在处理形式上的统一性是建立模板的基础。但是,这种统一性是相对的,个别数据类型有可能比较特殊,在处理形式上与大多数数据类型不一致。针对这样的特殊情况,可以通过重载模板函数进行定制。这样把重载的模板称为补充模板,相应地,原模板则称为主模板。
     9.2 类模板
     1类模板的概念、定义与应用
     类模板就是一系列相关类的模型或样板,这些类的成员组成相同,成员函数的源代码形式相同,所不同的只是所针对的类型(成员的类型以及成员函数的参数和返回值的类型)。对于类模板,数据类型本身成了它的参数,因而是一种参数化类型的类,是类的生成器。类模板中声明的类称为模板类。
     声明一个类模板的格式是:
       template模板形参表声明类声明
     模板形参表声明是由一个或多个模板形参组成;与一般的类声明的不同之处在于,这里的类声明要用模板形参表声明中声明的虚拟类型参数来修饰它的某些成员,使模板类独立于任何具体的数据类型。
     在模板外对成员函数的声明格式是:
         template模板形参表声明
         返回类型类名模板形参表::函数名(函数形参表)函数体
     其中模板形参表就是由模板形参表声明中声明的参数名组成的序列。应注意,类模板的成员函数都是模板函数,因此在模板外声明成员函数的格式与声明普通模板函数十分相似。
     用类模板定义对象的格式是:
       类名模板实参表 对象名;
     或
       类名模板实参表 对象名(构造函数实参表);
     在定义对象的过程中,编译系统会自动地根据需要生成相应的类定义,这种依据类模板生成类定义的过程称为类模板的实例化。类模板实例所生成的每一个类定义就是相应类模板的一个实例。
     在用类模板定义对象时,由于没有像函数实参表这样的额外信息渠道,因此无法按函数模板的方式省略模板实参。但是,可以为类模板的参数设置默认值。具体地说,在定义类模板时,可以为模板形参表声明的最后若干个参数设置默认值;而这些有默认值的参数中,最后的若干个对应实参可以在定义对象时省略。
3类模板的派生与继承
     一谈到继承总涉及到两个类:基类和派生类,它们中任何一个都有可能是模板类,或模板类的实例。下面列出常见的几种情况。
     (1)普通类继承类模板的一个实例。
     可以通过继承类模板的一个实例来声明一个类。
     (2)模板类继承普通类。
     在声明一个类模板时,应尽可能将类模板中与虚拟类型参数无关的成员剥离出来,构成一个普通类,作为类模板的基类。因此,类模板继承普通类的情况是十分常见的。
     (3)模板类继承模板类。
     可以通过继承一个模板类来声明一个类模板。
     (4)模板类继承模板参数给出的基类。
     模板的派生甚至可以继承一个未知的基类。也就是说,继承哪个基类由模板参数决定。
3类模板的定制
     与函数模板类似,类模板有时也需要定制,以适应某些特殊情况。类模板的定制也是通过定义补充模板实现的,称为模板的特例化,每个补充模板就是主模板的一个特例。
     例题精题


[招考就业]2010年国家公务员考试报考{参考指南}  [招考就业]2010年国家公务员考试备考指南
[Web开发]net在线考试系统如何控制考试时间  [Web开发]asp.net网上考试系统功能介绍
[网页制作]DreamWeaver+Css轻松实现网页段落首行缩进!  [网页制作]DIV+CSS+javascript实现DIV对象显示在页面任何位置…
[网页制作]div+css实现网页模块或栏目拖动(即拖拽效果)  [网页制作]XHTML+CSS兼容性解决方案
[网页制作]网页设计之css+div PK table+css  [网页制作]DIV+CSS三行两列经典布局
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · 电脑应用  · 网络应用
    · 软件开发  · 软件使用
    · 站长学院  · 数据库
    · 应用范文  · 网络书斋
    · 考试认证  · 精彩网文
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台