面向对象程序设计语言C++第2版 教学课件 作者 陈文宇面向对象程序设计语言C++ - 第9章 模板.ppt

面向对象程序设计语言C++第2版 教学课件 作者 陈文宇面向对象程序设计语言C++ - 第9章 模板.ppt

ID:50516824

大小:581.50 KB

页数:32页

时间:2020-03-10

面向对象程序设计语言C++第2版 教学课件 作者 陈文宇面向对象程序设计语言C++ - 第9章 模板.ppt_第1页
面向对象程序设计语言C++第2版 教学课件 作者 陈文宇面向对象程序设计语言C++ - 第9章 模板.ppt_第2页
面向对象程序设计语言C++第2版 教学课件 作者 陈文宇面向对象程序设计语言C++ - 第9章 模板.ppt_第3页
面向对象程序设计语言C++第2版 教学课件 作者 陈文宇面向对象程序设计语言C++ - 第9章 模板.ppt_第4页
面向对象程序设计语言C++第2版 教学课件 作者 陈文宇面向对象程序设计语言C++ - 第9章 模板.ppt_第5页
资源描述:

《面向对象程序设计语言C++第2版 教学课件 作者 陈文宇面向对象程序设计语言C++ - 第9章 模板.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、面向对象程序设计语言C++电子科技大学示范性软件学院1第九章模板9.1类属的概念类属(genericity)首先由ALGOL68引入,是Ada语言的典型成分。关于Ada的类属,我们只考虑它的一种最重要的形式,即类型参数化;它表现了使用一个或多个类型去参数化一个软件元素(如Ada中的程序包或函数)的能力。类属又可分为无约束类属机制和约束类属机制,其中无约束类属机制是指对类属参数没有施加任何特殊的要求,而约束类属机制则意味着类属参数需要一定的辅助条件。2第九章模板9.1类属的概念9.1.1无约束类属机制考虑一个函数,它用来交换两个变量的值。使用非静态强类型语言,可

2、编写出如下函数(用类Ada的语法形式):procedureswap(x,y)ist:local;begint:=x;x:=y;y:=t;endswap;这里,被交换的元素x和y的类型以及局部变量t的类型都不需要指定,这显得很自由,可能会导致错误。如果a是整型变量,b是字符串,swap(a,b)显然引起错误,而编译程序却无法检查。3第九章模板9.1类属的概念9.1.1无约束类属机制考虑一个函数,它用来交换两个变量的值。使用非静态强类型语言,可编写出如下函数(用类Ada的语法形式):procedureswap(x,y)ist:local;begint:=x;x:=

3、y;y:=t;endswap;这里,被交换的元素x和y的类型以及局部变量t的类型都不需要指定,这显得很自由,可能会导致错误。如果a是整型变量,b是字符串,swap(a,b)显然引起错误,而编译程序却无法检查。4第九章模板9.1类属的概念9.1.1无约束类属机制为了解决这一问题,像Pascal这样的静态强类型语言需要程序员明确地定义所有变量和形参的类型。迫使函数调用时进行实参与形参之间的强类型检查,以避免产生类型不兼容的错误。这就产生了不愉快的后果,在缺少重载机制支持的情况下,要为每种类型的交换操作声明一个新的过程:int_swap,str_swap,float

4、_swap,……。5第九章模板9.1类属的概念9.1.1无约束类属机制相比之下,含类属机制的这类语言提供了一种折衷的办法,它既不像非类型语言那样太多的自由,也不像Pascal那样的强类型语言施加太多的约束。一个类属化的swap可以用类Ada语言声明为generictypeTisprivate;procedureswap(x,y:inoutT)ist:T;5begint:=x;x:=y;y:=t;endswap;6第九章模板9.1类属的概念9.1.1无约束类属机制语句generic引入了一个类型参数T,也称类属参数T,swap的两个形参x、y和局部变量t都具有T

5、的类型,这样,只要类属参数T实例化为某一具体类型,例如integer类型或者string类型,swap函数都能正确工作。swap表示一个函数模板,或称类属函数,它代表的是一类函数实际的函数是将T实例化而获得的。procedureint_swapisnewswap(integer);procedurestr_swapisnewswap(string);7第九章模板9.1类属的概念9.1.1无约束类属机制语句generic引入了一个类型参数T,也称类属参数T,swap的两个形参x、y和局部变量t都具有T的类型,这样,只要类属参数T实例化为某一具体类型,例如inte

6、ger类型或者string类型,swap函数都能正确工作。swap表示一个函数模板,或称类属函数,它代表的是一类函数实际的函数是将T实例化而获得的。procedureint_swapisnewswap(integer);procedurestr_swapisnewswap(string);8第九章模板9.1类属的概念9.1.1无约束类属机制这种类属机制可以称为无约束类属机制,所谓无约束是指,对于作为类属的参数,没有施加任何特殊的条件,这里,我们可以交换任意类型的变量。9第九章模板9.1类属的概念9.1.2约束类属机制考虑下面的例子,假定我们需要一个类属函数来计

7、算两个值的最小值。其类属程序如下:generictypeTisprivate;functionminimum(x,y:T)returnTisbeginifx<=ythenreturnx;elsereturnyendif;endminimum10第九章模板9.1类属的概念9.1.2约束类属机制在这个函数声明中,比较运算符“<=”因类型T不同,它的意义是很不相同的。显然,结构变量的比较与整型变量的比较有很大的差别。类型T中必须定义比较运算符“<=”,这个函数声明才有意义。关于这一特性的检查只有在允许时才能进行。因此,我们需要按某种方式来指明在类型T中必须具备有关的

8、操作。11第九章模板9.1类属的概念9

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

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

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