C++程序设计 第11篇.ppt

  1. 1、本文档共39页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第11章 模板 11.1 模板函数——重点 11.2 模板类——重点 11.3 模板的多态——了解 11.4 高级编程——了解 11.1模板概述 模板:模板是一种用于表达逻辑结构相同,但具体数据元素类型不同的数据对象的通用行为。 模板的分类: 模板函数 模板类 模板的使用:通过模板可以定义类或函数的集合,使它们操作不同的数据类型,从而避免需要为每一种数据类型产生一个单独的类或函数。 模板的两种类型及用法 11.2 模板函数的语法 函数模板的一般定义形式 template class 类型参数 返回类型 函数名(模板形参表) { 函数体 } 或者 templatetypename 类型参数 返回类型 函数名(模板型参表) { 函数体 } 模板函数举例 templatetypename T T min(T a, T b) { return ab?a:b; } void main () { int i=2, j=3,c; c=min(i,j); cout‘‘c=’’cendl; } 我们先来看一个例子 #include “iostream.h” templateclass T //声明一个函数模板 T max(T x, T y) { return (xy)? x:y; } void main() { int a = 6, b = 8; float c = 8.5, d = 2.2; double e = 21.123, f = 145.987; char g = ‘z’, h = ‘m’; coutmax(a,b)endl; //函数模板的实例化 coutmax(c,d)endl; coutmax(e,f)endl; coutmax(g,h)endl; } 结论:模板被编译了两次,分别发生在: 实例化之前,先检查模板代码本身,查看语法是否正确:在这里会发现错误的语法,如遗漏分号等。 在实例化期间,检查模板代码,查看是否所有的调用都有效。在这里会发现无效的调用,如该实例化类型不支持某些函数调用等。 11.2.2模板函数重载 和普通函数一样,模板函数也可以被重载,于是,当使用函数名称进行函数调用的时候,C++编译器必须决定究竟要调用哪个候选函数。 【程序11.1】叙述了如何重载一个模板函数: 【程序11.1】 // 求两个int值的最小值 inline int const min (int const a, int const b) { return a b ? a : b; } // 求两个任意类型值的最小值 template typename T inline T const min (T const a, T const b) { return a b ? a : b; } // 求三个任意类型值的最小值 template typename T inline T const min (T const a, T const b, T const c) { return min(min(a, b), c); } int main( ) { min(2, 13, 45); // 调用三个参数的模板函数 min (2.0, 13.0); // 调用min double (通过实参演绎) min (a, b); // 调用min char (通过实参演绎) min (2, 13); // 调用有两个int类型参数的普通函数 min int (2, 13); // 调用min int (通过实参演绎) min double(2, 13); // 调用min double (没有实参) return 0; } 11.3 模板类 11.3.1模板类的创建及使用 template class Type class ClassName { //具体内容 }; 或 template typename Type class ClassName { //具体内容 }; 调用形式: ClassName类型实参表 object; 模板类是类模板对某一特定类型的实例。 看下面一个例子: #includeiostream.h templateclass T1, class T2 //定义两个模板参数的类模板 class myclass{ T1 i;

文档评论(0)

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

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

1亿VIP精品文档

相关文档