第十章模板丘志杰计算机学院软件学院
第十章 模板 丘志杰 计算机学院 软件学院
C++最重要的特征之一就是代码重用,为了实现代码重用,代码必须具有通用性。通用的代码需要不受数据类型的影响,并且可以自动适应数据类型的变化。这种程序设计类型称为参数化程序设计(泛型程序设计)2026/9/17
2026/9/17 2 • C++最重要的特征之一就是代码重 用,为了实现代码重用,代码必须 具有通用性。通用的代码需要不受 数据类型的影响,并且可以自动适 应数据类型的变化。这种程序设计 类型称为参数化程序设计(泛型程 序设计)
模板是C++支持参数化程序设计的工具,通过它可以实现参数化多态性。所谓的参数化多态性,就是将程序所处理的对象的类型参数化,使得一段程序可以处理多种不同类型的对象。32026/9/17
2026/9/17 3 • 模板是C++支持参数化程序设计的 工具,通过它可以实现参数化多态 性。 • 所谓的参数化多态性,就是将程序 所处理的对象的类型参数化,使得 一段程序可以处理多种不同类型的 对象
函数模板和模板函数请大家考虑这样的问题:写一个函数求两个值中的最大者。作为强类型的语言,C++“不允许”也不应该两种不同类型的参数进行比较。一般的解决办法就是写一系列的函数,来分别完成整型、浮点型和用户自定义类型的求解。int max(int x,int y)k...)float max(float x,float y)..)可以想像,所有这些函数(的代码)几乎都是一模一样的,只是操作的类型不同。这使程序代码变得累赘而加大维护难度。2026/9/174
2026/9/17 4 函数模板和模板函数 • 请大家考虑这样的问题:写一个函数求两个 值中的最大者。作为强类型的语言,C++ “不允许”也不应该两种不同类型的参数进 行比较。一般的解决办法就是写一系列的函 数,来分别完成整型、浮点型和用户自定义 类型的求解。 int max(int x,int y){.} float max(float x,float y){.} • 可以想像,所有这些函数(的代码)几乎都 是一模一样的,只是操作的类型不同。这使 程序代码变得累赘而加大维护难度
一个变通的方法是使用宏定义#define max(x, y) (x) > (y) ? (x) : (y)这样做虽然解决了代码维护问题,但是由于宏定义只是在编译时进行简单的宏展开,避开了类型检查机制,因此可能带来一些难以发觉的错误。52026/9/17
2026/9/17 5 • 一个变通的方法是使用宏定义: #define max(x, y) ((x) > (y) ? (x) : (y)) 这样做虽然解决了代码维护问题,但是由于 宏定义只是在编译时进行简单的宏展开,避 开了类型检查机制,因此可能带来一些难以 发觉的错误