>[info] # 函数模板
* C++提供了**函数模板(function template)**,用以解决函数体完全一样,而函数类型和形参类型不一致的情况.
* 所谓函数模板,实际上是建立一个通用函数,其函数类型和形参类型不具体指定,用一个**虚拟类型**来代表,这个**通用函数**就称为函数模板.
* 在调用函数时系统会根据实参的类型来取代模板中的**虚拟类型**,从而实现了不同函数的功能.
* 用函数模板比函数重载更方便,程序更简洁.但应注意它**只适用**于函数的参数个数相同而类型不同,且函数体相同的情况,如果参数的个数不同,则不能用函数模板.
**定义函数模板的一般形式**
* template通用函数定义
* template 通用函数定义
* 类型参数可以不只一个, 根据需要确定个数. template
## **例子**
~~~
/* ***求两个整数或3个整数中的最大数*** */
#include <iostream>
using namespace std;
template<typename T> //模板声明,其中T为类型参数
T max(T a,T b,T c) //定义一个通用函数,用T作虚拟的类型名
{
if(b>a) a=b;
if(c>a) a=c;
return a;
}
int main( )
{
int i1=185,i2=-76,i3=567,i;
double d1=56.87,d2=90.23,d3=-3214.78,d;
long g1=67854,g2=-912456,g3=673456,g;
i=max(i1,i2,i3); //调用模板函数,此时T被int取代
d=max(d1,d2,d3); //调用模板函数,此时T被double取代
g=max(g1,g2,g3); //调用模板函数,此时T被long取代
cout<<”i_max=”<<i<<endl;
cout<<”d_max=”<<d<<endl;
cout<<”g_max=”<<g<<endl;
return 0;
}
~~~
- 介绍
- 编程设计语言
- 第一章 对C++的初步认识
- 1.2 最简单的C++程序
- 1.3 C++对C的补充
- 1.3.1 return
- 1.3.2 输入输出流
- 1.3.3 putchar 和 getchar
- 1.3.4 用const定义常变量
- 1.3.5 函数原型声明
- 1.3.6 内置函数
- 1.3.7 函数重载
- 1.3.8 函数模板
- 1.3.9 有默认值的参数
- 1.3.10 作用域
- 1.3.11 const修饰指针
- 1.3.12 引用
- 1.3.13 生命期
- 1.3.14 变量
- 1.3.15 字符串变量
- 第二章 类与对象
- 2.2 类的声明和对象的定义
- 2.3 类的成员函数
- 第三章 关于类和对象的进一步讨论
- 3.1 构造函数
- 3.1.1 对象的初始化
- 3.1.2 构造函数
- 3.2 析构函数
- 3.3调用析构函数和构造函数的顺序
- 3.4 对象数组
- 3.5 对象指针
- 3.6 共享数据的保护
- 3.7 对象的建立与释放
- 3.8 对象的赋值与复制
- 3.9 静态成员
- 3.10 友元
- 3.11 类模板
- 第四章 运算符重载
- 数据类型转换
- 运算符重载
- 重载流插入运算符和流提取运算符
- 第五章 继承与派生
- 继承与派生
- 第六章 多态性与虚函数
- 多态性
- 虚函数
- 纯虚函数与抽象类