C++模板编程和STLppt课件.ppt

C++模板编程和STLppt课件.ppt

ID:59448075

大小:165.50 KB

页数:50页

时间:2020-09-18

C++模板编程和STLppt课件.ppt_第1页
C++模板编程和STLppt课件.ppt_第2页
C++模板编程和STLppt课件.ppt_第3页
C++模板编程和STLppt课件.ppt_第4页
C++模板编程和STLppt课件.ppt_第5页
资源描述:

《C++模板编程和STLppt课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、C++模板编程和STLC++模板编程模板模板是C++强大的软件复用特性属于泛型编程技术(genericprogramming)代码要想重用,就得通用,通用的一大障碍就是类型限制。若代码能自动适应类型的变化,通用进而重用就成为可能;“自动适应类型的变化”就是将确定的类型变成了不确定的东西,函数的参数就是这种不确定的东西,将类型参数化是解决途径。这是继值、地址参数化之后,将类型也参数化的技术,叫做模板。模板就是类型的参数化技术;模板代表了一个代码家族函数模板代表了一个函数家族;类模板代表了一个类家族;模板引入的类型的抽象,是泛型程序设计的基础,在STL中得到最广泛的应用。泛型编程技术与面向对象的

2、编程风格在编程思想上是相左的,面向对象风格表现了数据和操作被捆绑封装为一体;而泛型编程技术则极力将数据和操作分离、独立。模板其实就是“代码生成器”模板分为函数模板和类模板模板使用模型二级实例化模板对象1模板函数对象n类模板函数模板模板类二级实例化一级实例化一级实例化………类模板类模板不是类,是一类相同属性和功能但不同类型的类的制作模型。用户使用类模板可以为类声明一种模式,使得类中的某些数据成员的类型、某些成员函数的参数类型、某些成员函数的返回值类型,都能取任意类型,从而实现代码重用为何要引进类模板?按不同的方式重用相同的代码使代码参数化(通用化),即不受类型和操作的影响类模板是一种参数化类型

3、的类,是类的生成器。类模板(1)类模板的定义template<模板参数表>class<类名>{<类体说明>};//类体实现模板参数表class<标识符>例如,array.h文件中类模板的定义(2)用类模板定义对象的格式是:<类名><<模板实参表>><对象名>(<构造函数实参表>);模板类模板类在定义了类模板后,可根据需要生成相应的模板类。即,对模板参数,指定具体的类型。例如,当指定AType为int型时,生成模板类array利用模板类创建对象格式如下:arraya1=10;类模板的继承与派生模板类的派生与普通类一样,也分为公有派生类、保护派生类和私有派生类三种。模板派生类

4、中成员的访问控制规则与普通类也是一样的。下面给出常见的几种情况:普通类继承类模板模板类继承普通类模板类继承模板类模板类继承模板参数给出的基类普通类继承类模板可以通过继承类模板的一个实例来声明一个类,例如:templateclassTBase{Tdata;……};classDerived:publicTBase{……};模板类继承普通类模板类TDerived继承了普通类TBase,这种情况十分常见。例如:classTBase{……};templateclassTDerived:publicTBase{Tdata;……};模板类继承模板类例如:templ

5、ateclassTBase{Tdata1;……};templateclassTDerived:publicTBase{T2data2;……};类模板和模板类小结类模板是一个类型参数化的样板,它是一组模板类的集合。模板类是某个类模板的实例。使用某个具体的类型来替换某个类模板的模板参数可以生产该类模板的一个模板类。可以通过模板类再创建具体的对象。类模板的作用:让类参数化,以加强其通用性,提供代码的重用率。函数模板函数模板是通过对参数类型进行参数化后,获取有相同形式的函数体。它是一个通用函数,它可适应一定范围内的不同类型对象的操作。函数模板

6、将代表着不同类型的一组函数,它们都使用相同的代码,这样可以实现代码重用,避免重复劳动,又可增强程序的安全性。函数模板对于写出通用型算法至关重要。函数模板的定义格式函数模板的定义格式:template<(参数化类型名表)><类型><函数名>(<模板参数表>){<函数体>}参数化类型名表又称模板参数表,多个表项用逗号分隔。每个表项称为一个模板参数(模板形参)。格式如下:class<参数名>或typename<参数名>或<类型修饰><参数名>类型推断在调用模板函数时,函数参数的类型决定到底使用模板的哪个版本,即,模板的参数是由函数参数推断出来的。编译器能够从一个调用推断出类型参数和非类型参数。te

7、mplateT&lookup(Buffer&b,constchar*p);classRecord{constcharv[12];};Record&f(Buffer&buf,constchar*p){returnlookup(buf,p);//使用lookup,其中T是Record类型,i是128}不能进行类型推断(省略类型参数)以下四种情况模板实参不

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。