《C模板简介》PPT课件.ppt

上传人:sh****n 文档编号:8632437 上传时间:2020-03-30 格式:PPT 页数:46 大小:810.05KB
返回 下载 相关 举报
《C模板简介》PPT课件.ppt_第1页
第1页 / 共46页
《C模板简介》PPT课件.ppt_第2页
第2页 / 共46页
《C模板简介》PPT课件.ppt_第3页
第3页 / 共46页
点击查看更多>>
资源描述
STL StandardTemplateLibrary 泛型编程 GenericProgramming 代码复用 第6章模板 6 1模板概述 6 2函数模板 6 3类模板 6 4标准模板库 若一个程序的功能是对某种特定的数据类型进行处理 则可以将所处理的数据类型说明为参数 以便在其他数据类型的情况下使用 6 1模板概述 Templates 通过模板可以产生类或函数的集合 使它们操作不同的数据类型 从而避免需要为每一种数据类型产生一个单独的类或函数 泛型编程 genericprogramming 模板用于表达逻辑结构相同 但具体数据元素类型不同的数据对象的通用行为 6 1模板概述 模板是支持参数化程序设计的工具 实现参数的多态性将程序要处理的对象的类型参数化 使程序可以处理不同类型的对象 C 提供两种模板机制 函数模板类模板 6 2函数模板 考虑求两参数之中大值函数 max a b 对a b的不同类型 都有相同的处理形式 return a b a b 用已有方法解决对不同数据类型处理 1 宏替换 definemax a b a b a b 问题避开类型检查 2 重载问题需要许多重载版本 3 使用函数模板 6 2函数模板 重载函数通常基于不同的数据类型实现类似操作 对不同数据类型的操作完全相同 用函数模板实现更为简洁方便 C 提供的函数模板可定义一个对任何类型变量进行操作的函数 从而大大增强了函数设计的通用性 intmax inta intb intmax chara charb Boxmax Boxa Boxb templateTmax Ta Tb returna b a b return a b a b template 声明模板中使用的类型参数 形式 6 2 1模板说明 类型形式参数的形式为 typenameT1 typenameT2 typenameTn或classT1 classT2 classTn 类型参数 templatetemplatetemplate templateTmax Ta Tb returna b a b template类型函数名 形式参数表 语句序列 函数模板定义由模板说明和函数定义组成 模板说明的类型参数必须在函数首部中至少出现一次函数参数表中也可以使用一般类型参数 templateTmax Ta intn 6 2 2函数模板定义 templateTmax Ta Tb returna b a b includetemplateTmax Ta Tb returna b a b voidmain cout max 3 5 is max 3 5 endl cout max y e is max y e endl cout max 9 3 0 5 is max 9 3 0 5 endl 例1简单函数模板应用 函数模板 intmax inta intb returna b a b 由实参类型实例化 charmax chara charb returna b a b doublemax doublea doubleb returna b a b 编译器生成的模板函数 程序执行时匹配不同的版本 类型实参与类型形参必须严格匹配templateTmax Ta Tb returna b a b 6 2 3函数模板参数匹配 max i1 i2 maxmax c1 c2 maxmax i c errormax f d errormax str1 str2 charstr1 10 str2 10 max b1 b2 Boxb1 b2 模板类型不能提供类型的隐式转换 显式指定模板类型参数可以实现类型转换 max 3 a max f d intmax inta intb returna b a b 寻找和使用最符合函数名和参数类型的函数 寻找一个函数模板 将其实例化产生一个匹配的模板函数 若找到则调用它 寻找可以通过类型转换进行参数匹配的函数 如果按以上步骤均未能找到匹配函数 则调用错误 如果调用有多于一个的匹配选择 则调用匹配出现二义性 6 2 4重载函数模板 templateTMax constTa constTb returna b a b templateTMax constTa constTb constTc Tt t Max a b returnMax t c intMax constinta constcharb returna b a b voidmain Max 9 3 0 5 Max 9 5 23 Max a b c Max 1 1 Max lelele hahaha 例3重载函数模板示例 intMax constinta constcharb returna b a b templateTMax constTa constTb constTc Tt t Max a b returnMax t c templateTMax constTa constTb returna b a b 重载函数模板 用普通函数重载函数模板 函数模板练习 templatevoidSwap T x T y templatevoidSwap Type a Type b 编写交换两个数据的函数模板 交换两个int型变量中的数据交换两个char型变量中的数据交换两个字符串 函数模板练习 templateTmin Ta intn Tmin a 0 for inti 1 ia i min a i returnmin 编写一个对具有n个元素的数组a 求最小值的程序 要求将求最小值的函数设计成函数模板 函数模板作业 templatevoidSort T a intsize Ttemp 排序法的函数模板 voidSort int array intsize SortvoidSort double array intsize SortvoidSort char carray intsize SortvoidSort char name intsize SortvoidSort string name intsize SortvoidSort Box boxes intsize Sort 函数模板作业 1 用函数模板方式设计一个函数模板sort 采用插入排序方式对数据进行排序可对整数序列 字符序列进行排序 可对盒子数组 字符串数组进行排序 2 设计函数模板实现折半查找算法binSearch在大小为n的数组arr中查找值为Key的元素返回查找结果 找到为下标 没找到 1 intbinSearch Tarr intn Tkey 模板 函数模板 类模板 对象 模板函数 模板类 类模板实际上是函数模板的推广 类模板用于实现类所需数据的类型参数化类模板主要用于数据存储 容器 类 类模板在表示数据结构如数组 表 图等显得特别重要 他们表示和算法不受所包含的元素类型的影响 6 3类模板 类模板类型为T的数组数据 类定义int类型数组 类定义string类型数组 类定义Box类型数组 类定义Employee 类型数组 安全整形数组classArray public Array ints Array int templateclassArray public Array ints Array constT 例4一个数组类模板 数据成员是T类型指针 类模板由模板说明和类说明构成 template类声明 例如 templateclassTClass public TClass的成员函数private TypeDateMember 类属参数必须至少在类说明中出现一次 6 3 1类模板与模板类 类模板的声明与定义 templateclass类名 类说明 template返回类型类名类型名 成员函数1 形参表 成员函数定义体 template返回类型类名类型名 成员函数n 形参表 成员函数定义体 类模板的成员函数是函数模板 Array templateArray Array ints size s 1 s 1 element newT size templateArray Array delete element templateconstT 例4一个数组类模板 templateclassArray public Array ints virtual Array virtualconstT include include Array h voidmain ArrayIntAry 5 for inti 0 iDouAry 5 for i 0 i 5 i DouAry set i i 1 0 35 cout DoubleArray n for i 0 i 5 i cout DouAry get i t cout endl 例4一个数组类模板 classArray public constint classArray public constdouble 使用类模板的方法 1 在程序开始或头文件中说明类模板的定义 2 在适当的地方创建一个模板类的实例 即一个模板类定义 同时创建该模板类对象 3 使用对象调用成员函数 其实参类型与模板类规定的类型一致 6 3 1类模板与模板类 templateclass 函数的形式参数类型可以是类模板或类模板的引用 实参为该类模板实例化的模板类对象 当一个函数拥有类模板参数时 这个函数必定是函数模板 6 3 2类模板作函数参数 templatevoidArray operator constArray 一个用Array作参数的函数模板 6 3 2类模板作函数参数 注意 模板的声明和定义必须在同一文件中 否则产生连接错误 一个类模板在类层次结构中既可以是基类也可以是派生类 类模板可以从模板类派生类模板可以从非模板类派生模板类可以从类模板派生非模板类可以从类模板派生 6 3 3类模板与继承 templateclassArray public Array ints virtual Array virtualT 从类模板Array派生一个安全数组类模板BoundArray 6 3 3类模板与继承 templateclassArray templateclassBoundArray publicArray public BoundArray intlow 0 intheight 1 T 从类模板Array派生一个安全数组类模板BoundArray 6 3 3类模板与继承 作业 1 编写并使用安全数组类模板BoundArray 要求 1 从数组类模板Array派生而来 2 包括对数组进行排序和查找的方法 3 重载 BoundArray BoundArray和BoundArray 作业 2 用类模板方式设计一个栈类stack 其中数据存储结构用动态数组实现 类中包含两个私有数据成员 T s 存放栈元素 和top 栈顶元素下标 至少包含3个公有成员函数 push 元素入栈 pop 元素出栈 和stackempty 判断栈是否为空 并建立一个整数栈 一个字符栈和学生栈测试模板 链表 结构体1 structStu intnum stringname doublescore Stu next Stu Create 创建链表voidAdd Stu 删除链表 链表类2 classStu classStuNode public StuNode StuNode voidprint staticStuNode pHead staticintcount private Stus StuNode pnext StuNode Create voidDelete voidAdd StuNode 链表类3 classStu classStuNode 节点类 public StuNode StuNode voidprint const StuNode nextNode const voidinsertAfter StuNode 链表类classStuList public StuList StuList voidcreat voiddelete voidAdd Stu 链表类模板4 templateclassNode 结点类模板 public Node pNext Tdata Node constT 链表类模板4 templateclassList public List List voidAdd Node 6 4标准模板库 STL StandardTemplateLibrary STL包括 容器 迭代器 算法等 6 4 1容器 container 容器是存储数据的一种方式容器分类 顺序容器关联容器和容器适配器顺序容器 vector 矢量 list 链表 deque 双端队列 关联容器set 集合 multiset map 映射 multimap容器举例 vector cpp set cpp 6 4 2迭代器 iterator 迭代器类似于指针 用来访问容器中的单个数据项 迭代器由类iterator来表明 不同的迭代器必须用于不同的容器 迭代器分类 向前迭代器 双向迭代器 随机迭代器使用迭代器 数据访问与数据插入 6 4 3算法 algorithm STL算法在数据集上进行操作 泛型算法不依赖于具体的容器 泛型算法分类为 1 不修改序列的操作find cout equal mismatch 和search 等 2 修改序列的操作swap copy transform replace remove reverse rotate 和fill 等 3 排序 合并和相关的操作sort binary search merge min 和max 等 模板是C 类型参数化的多态工具 C 提供函数模板和类模板模板定义以模板说明开始 类属参数必须在模板定义中至少出现一次同一个类属参数可以用于多个模板类属参数可用于函数的参数类型 返回类型和声明函数中的变量模板由编译器根据实际数据类型实例化 生成可执行代码 实例化的函数模板称为模板函数 实例化的类模板称为模板类函数模板可以用多种方式重载类模板可以在类层次中使用 小结 肇庆代办公司注册诸智刚崅
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!