怎样建立网站平台,校园二手网站开发的意义,网站开发的基本流程文库,网站免费网站免费优化优化一、函数模板
1.1 概念
函数模板代表了一个函数家族#xff0c;该函数模板与类型无关#xff0c;在使用时被参数化#xff0c;根据实参类型产生函数的特定类型版本。
格式#xff1a; template typename T或template class T
template class T…一、函数模板
1.1 概念
函数模板代表了一个函数家族该函数模板与类型无关在使用时被参数化根据实参类型产生函数的特定类型版本。
格式 template typename T或template class T
template class T
void Swap(T a, T b)
{T tmp a;a b;b tmp;
}int main()
{int a 1, b 2;double d1 1.2, d2 2.1;Swap(a, b);Swap(d1, d2);return 0;
}1.2 函数模板的原理 在编译阶段编译器需要根据传入实参的类型推演生成对应类型的函数。
1.3 函数模板的实例化
用不同类型的参数使用函数模板时称为函数模板的实例化。
1. 隐式实例化编译器根据传入实参的类型推演生成对应类型的函数
如上Swap()。
template class T
T Add(const T x, const T y)
{return x y;
}int main()
{int a1 1;double d1 2.0;// error// Add(a1, d1); // 1. Add(a1, (int)d1); 2. 显式实例化return 0;
}2. 显式实例化在函数名后的中指定函数模板的参数类型
template class T
T Add(const T x, const T y)
{return x y;
}int main()
{int a1 1;double d1 2.0;Add double(a1, d1);// 显式实例化return 0;
}二、类模板
2.1 类模板格式
template class T1, class T2, ..., class Tn
class 类模板名
{// 类成员定义
};E.g.
template class T1
// typedef int STDateType class Stack// Stack不是具体的类是编译器根据被实例化的类型生成的具体类的模具
{
public:Stack(int capacity 3):_top(0), _capacity(capacity){cout Stack(int capacity 3) endl;// _a new STDateType[capacity];_a new T1[capacity];}~Stack(){cout ~Stack() endl;delete _a;_top _capacity 0;}
private:// STDateType* _a;T1* _a;int _top;int _capacity;
};