C++语言程序设计:MOOC版
第10章C++标准库
阚道宏
第10章C++标准库
• C++标准库
– 基于结构化程序设计方法所提供的系统函数
– 基于面向对象程序设计方法所提供的系统类库
• 使用系统类库
系统类库是一组预先定义好的类。程序员可以直接
使用这些类来定义对象,也可以通过组合或继承来
定义新的类。系统类库极大地扩展了C++语言的功
能,使得程序员可以在更高的起点上开发程序
• 模板技术:函数模板、类模板
阚道宏
第10章C++标准库
• 本章内容
– 10.1 函数模板
– 10.2 类模板
– 10.3 C++标准库
– 10.4 C++语言的异常处理机制
– 10.5 数据集合及其处理算法
– 10.6 结语
阚道宏
10.1 函数模板
• 函数模板的基本原理是通过数据类型的参数化,
将一组算法相同但所处理数据类型不同的重载函
数凝练成一个函数模板。编译时,再由编译器按
照函数模板自动生成针对不同数据类型的重载函
数定义代码
int max( int x, int y ) { return (x>y ? x:y); } // 求2个整数的最大值
double max( double x, double y ) { return (x>y ? x:y); } // 求2个实数的最大值
char max( char x, char y ) { return (x>y ? x:y); } // 求2个字符的最大值
template // 定义函数模板max
T max( T x, T y )
{ return ( x>y ? x : y ); }
阚道宏
10.1 函数模板
C++语法:定义函数模板
template
函数类型 函数名(形式参数列表)
{
函数体
}
语法说明:
定义函数模板以关键字“template ”开头;
类型参数是一种表示数据类型的参数。类型参数列表可定义一个或多个类型参数,每个类型参
数以“typename 类型参数名”或“class 类型参数名”的形式定义,类型参数之间用“, ”隔开。
类型参数名需符合标识符的命名规则;
函数模板定义的其余部分,包括函数类型、函数名、形式参数列表以及函数体,它们和普通函
数的定义形式没有什么区别。唯一不同的是,类型参数将会作为一种新的数据类型出现函数模
板定义中;
使用typename或class所声明的类型参数就像是一种新的数据类型,可以用它来定义函数类型
(即返回值的类型),也可以用来定义形参或在函数体中定义局部变量。类型参数是表示数据
类型的参数,调用时可被替换成任意一种实际数据类型,例如某种基本数据类型、自定义数据
类型或类类型等。类型参数也可理解成是一种通用数据类型;
函数模板定义中的前2行被称为是函数模板头。
阚道宏
10.1 函数模板
例10-1 一个完整的求最大值函数模板max的C++演示程序
1 #include
2 using namespace std;
3
4 template // 定义函数模板max
5 T max( T x, T y ) //