零基础学C++之高级篇一
零基础学C++之高级篇一
模板
模板是C++的高级特性,分为函数模板和类模板。模板使程序员能够快速建立具有类型安全的类库集合和函数集合,它的实现大大方便了大规模软件开发。
函数模板
函数模板鄙视一个实在的函数,编译器不能为其生成可执行代码,函数模板只是一个对函数功能框架的描述,当它具体执行时将根据传递的实际参数决定其功能。
函数模板的定义
函数模板定义的一般形式如下:
template <类型形式参数表> 返回类型 函数名(参数表)
{
...//函数体
}
template为关键字,表示定义一个模板,"<>"内为模板参数,模板参数主要有两种,一种是模板类型参数,另一种是模板非类型参数。
函数模板的作用
实例01 使用数组作为模板参数
#include <iostream>
using namespace std;
template <class type,int len>
type Max(type array[len])
{
type ret = array[0];
for(int i = 1; i < len ; i++)
{
ret = (ret > array[i]) ? ret : array[i];
}
return ret;
}
void main()
{
int array[5]={
1,2,3,4,5};
int iret=Max<int,5>(array);
double dset[3]={
10.5,11.2,9.8};
double dret=Max<dset,3>(dset);
cout << iret << dret << endl;
}
重载函数模板
实例02 重载函数模板获取字符串最小值
#include <iostream>
#include <string>
using namespace std;
template<class type>
type min(type a,type b)
{
if(a<b)
return a;
return b;
}
char *min(char *a,char *b)
{
if(strcmp(a,b))
return b;
return a;
}
void main()
{
cout << "最小值:" << min(10,1) << endl;
cout << "最小值:" << min('a','b') << endl;
cout << "最小值:" << min('hi','mr') << endl;
}
类模板
使用template 关键字不但可以定义函数模板,也可以定义类模板。类模板代表一族类,是用来描述通用数据类型或处理方法的机制,它使类中的一些数据成员和成员函数的参数或返回值可以取任意数据类型。类模板可以说是用类生成类,减少了类的定义数量。
类模板的定义与声明
类模板的一般定义形式为:
template <类型形式参数表> class 类模板名
{
... //类模板体
};
类模板成员函数定义形式为:
template <类型形式参数表>
返回类型 类模板名<类型名表>::成员函数名(参数列表)
{
... //函数体
}
template是关键字,类型形式参数表与函数模板定义相同。类模板的成员函数定义时,类模板名与类模板定义时要一致。类模板不是一个真实的类,而是需要重新生成类,生成类的形式如下:
类模板名<类型实在参数表>
用新生成的类定义对象的形式如下
类模板名<类型实在参数表> 对象名;
实例03 定义一个容器的类模板
template <class type>
class Container
{
type item;
public:
Container(){
};
void beigin(const type& tnew);
void end(const type& tnew);
void insert(const type& tnew);
void empty(const type& tnew);
};
void Container<type