资源描述:
《《C++面向对象程序设计》__第七章模板课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、面向对象程序设计C++模板及STL网络空间安全学院丁志芳一模板的概念二函数模板类模板群体数据泛型程序设计与标准模板库有关的概念C++标准模板库中的容器本章的主要内容问题的引入很多算法本身的描述其实与其所涉及数据的类型是无关的。但是,高级语言大多数都是基于类型系统的语言,当用高级语言表达算法的实现时,就必须明确指出其具体的数据类型这样以来就必然导致同一个算法有多个不同的实现(针对不同的数据类型)。从而使工作量加大,使用麻烦,维护困难。例:求两个数的最大数(请同学们想一想共有几种方案?)问题解决方案一:宏定义在C语言中,宏定义是解决类
2、型无关算法的首选解决方案。例:#definemax(x,y)((x)>(y)?(x):(y))宏定义有如下的缺点:重复计算只能做简单的置换,不做错误检查例如:如果是对两个数进行交换Swap(x,y)使用宏定义就不好处理。解决方案二:用C语言的函数intmaxI(intx,inty){return(x>y)?x:y;}doublemaxD(doublex,doubley){return(x>y)?x:y;}从上面的实现可以看出,这种方案不仅实现上浪费很大,而且使用起来非常的不方便(不同的函数名)。解决方案三:C++函数名重载与C语言
3、相比,C++的函数名重载让使用者大大地得到了解放,但实现者还是需进行大量的重复性劳动。intmax(intx,inty){return(x>y)?x:y;}doublemax(doublex,doubley){return(x>y)?x:y;}解决方案四:模板templateTmax(Tx,Ty){return(x>y)?x:y;}所谓模板是一种是将类型参数化来产生一系列函数或类的机制。模板的概念模板:对于某些实际的程序段,它们的逻辑功能是相同的,而所处理的对象(数据)类型是不同的。若提供具有相同逻辑功能的程序正文
4、,将数据类型作为参数传递。形成一种参数化通用功能的模型。模板既可以构造模板函数,也可以构造模板类。图1:模板、类、对象和函数之间的关系模板函数模板类模板模板类模板函数对象实例化实例化实例化模板的概念函数模板函数模板:创建一个通用功能的函数,其函数类型和形参类型不具体指定,用一个虚拟的类型来代表,以支持多种不同形参,这个通用的函数称为函数模板。一、函数模板的概念及其定义格式函数模板template<模板形参表>返回类型函数名(参数表){函数体}可以包含一个或多个用逗号分开的模板形式参数,每一项均有关键字class或typename引
5、导一个由用户命名的标识符,此标识符为类型参数,表示一种数据类型template是一个声明模板的关键字,它表示正在声明一个模板说明体是指模板定义体,为函数模板的定义.一、函数模板的概念及其定义格式templateTmax(Tx,Ty){return(x>y)?x:y;}template//模板声明STabs(STa)//定义函数模板{returna<0?-a:a;}类型参数函数模板名函数模板一、函数模板的概念及其定义格式二、函数模板的使用函数模板只是一种说明,并不是一个具体函数,它是一组函数的
6、模板,在定义中使用了参数化类型,编译系统不产生任何执行代码。只有在遇到具体函数调用的时候,根据调用处的具体参数类型,在参数实例化以后才产生相应的代码,此代码称为模板函数★函数模板二、函数模板的使用函数模板#includetemplate//模板定义,T为类型参数TMax(Tx,Ty)//定义函数模板{return(x>y)?x:y;}voidmain(){intx1,y1;floatx2,y2;doublex3,y3;cout<<"请输入2个整型数据,用空格分隔:"<>x
7、1>>y1;cout<<"Themaxofx1,y1is:"<>x2>>y2;cout<<"Themaxofx2,y2is:"<>x3>>y3;cout<<"Themaxofx3,y3is:"<8、由一个函数模板产生的函数称为模板函数。它是函数模板的具体实例。图2:函数模板和模板函数的关系函数模板max(x,y)模板函数max(x1,y1)x1,y1为整型实例化实例化实例化模板函数max(x2,y2)x2,y2为浮点型模板函数max(x3,y