网站大量收购独家精品文档,联系QQ:2885784924

C++程序设计课件(第6章).ppt

  1. 1、本文档共50页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C程序设计课件(第6章)

第6章 模板 本章学习重点掌握内容: 函数模板的定义、语法格式及使用注意事项 函数模板的实例化 函数模板与模板函数的区别 类模板的定义及使用注意事项 类模板的实例化 派生类和类模板的关系 第6章 模板 6.1 函数模板 6.2 类模板 6.3 综合应用实例 6.1 函数模板 学习模板函数之前,首先看看函数重载存在的缺陷。 【例6.1】函数重载例题 #includeiostream.h int max(int x, int y) { return xy?x:y ; } char max(char x, char y) { return xy? x:y ; } void main() { int x = 7; int y = 4; coutmax( x, y)endl; double a = 3.5; double b = 4.5; coutmax( a, b)endl; } 6.1 函数模板 例6.1中,在调用max(x, y)时,没有问题;在调用max(a, b)时会出现编译错误,因为没有定义double类型的重载版本。 对于上面的max()函数,它们具有同样的功能,能否只写一套代码呢? C++引入了函数模板解决这个问题。 6.1.1 函数模板语法 函数模板定义的语法格式如下: template class T1, class T2, … 类型名 函数名(参数表) { 函数体的定义 } 其中,template是声明函数模板的关键字。template后一对“”括起来且用“,”分隔的是函数模板参数表。 6.1.1 函数模板语法 模板参数分为模板类型参数和模板非类型参数。模板类型参数代表一种类型 每个模板类型参数前必须用关键字class或typename标识,表示“一个用户定义的或固有的数据类型” 。 模板非类型参数是一个普通的参数声明,要求在编译期就确定它的值,也就是说模板非类型参数必须是个编译期常量。 模板函数可以先定义后使用;也可以先声明,再使用,最后定义。 6.1.2 函数模板实例化 根据函数模板构造函数的过程称为函数模板实例化,这个过程是隐式发生的。 为了判断用作模板实参的实际类型和值,编译器需要检查函数调用提供的函数实参的类型。 用函数实参的类型来决定模板实参的类型和值的过程被称为模板实参推演。也可以显式地指定模板实参。 在取函数模板实例的地址时,必须能够通过上下文环境为一个模板实参决定一个唯一的类型或值。否则,就会产生编译时错误。 【例6.2】模板函数实现例6.1的函数重载例题。 #includeiostream.h template class T T max(T x, T y) { return xy? x:y ; } void main() { int x = 7; int y = 4; coutx和y的较大值是:; coutmax( x, y)endl; double a = 3.5; double b = 4.5; couta和b的较大值是:; coutmax( a, b)endl; } 此时,无论是调用max(x, y)还是调用max(a, b)都没有问题。这是因为,当编译器遇到表达式max(x, y)时,它就有哪些信誉好的足球投注网站与实参x,y相匹配的实max(),由于x,y的类型都是int,并且函数模板声明并使用了一个参数T,所以匹配也就确定了,编译器产生了一个如下所示的函数。 int max(int x, int y) { return xy?x:y ; } 当编译器遇到表达式max(a, b)时,有哪些信誉好的足球投注网站与实参a,b相匹配的实max(),由于a,b的类型都是double,并且函数模板声明并使用了一个参数T,所以匹配也就确定了,编译器产生了一个如下所示的函数。 double max(double x, double y) { return xy?x:y ; } 6.1.3 函数模板和模板函数 函数模板指定了怎样根据一组或更多实际类型或值构造出独立的函数。模板函数是根据函数模板构造出来的函数。二者区别如下: (1)函数模板与模板函数的关系好比类与对象的关系。函数模板与类的定义相似,而模板函数与对象的定义相似。 (2)函数模板是个模板,用来生成函数。模板函数是个函数,由函数模板生成。 6.1.3 函数模板和模板函数 (3)函数模板是程序员用代码写出来的,模板函数是编译系统在编译时根据函数模板自动生成的。 (4)函数模板是模板的定义,是一类函数的抽象,代表了一类具有相同功能的函数,

文档评论(0)

jgx3536 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:6111134150000003

1亿VIP精品文档

相关文档