函数模板:下面的程序中typename也可以用class
template <typename T>
T max(T a,T b,Tc){}
其中T是虚拟类型,函数模板就是将数据类型参数化。
类模板:参数化的类
对于上面的程序,虚拟类型名为numtype,类模板名为Compare;
一类将可以多用:虚拟类型参数名numtype可以替换成int,float,double,string甚至更多
自定义类及类型;
上面 程序中的<>里面的内容将会代替虚拟类型的名字;需要注意的是如果尖括号中的为int,那么它会代替整个类中所有的numtype为int;
只要在声明对象的时候用<>将虚拟类型明确了,之后的操作就不需要用<>了;
类模板的声明:
template <class 虚拟类型参数>
class 类名{......};//使用虚拟类型的类声明
类模板定义对象的形式:
类模板名<实际类型名> 对象名;
类模板名<实际类型名>对象名(实参表列);
在类模板外定义成员函数:
对于上面的程序来说,在类模板外面定义的成员函数,每个都要用类模板,也就是说,每个前面
都要加上一句template<class numtype>,否则的话编译系统会不识别numtype。
一般形式为:
template <class 虚拟类型参数>
函数类型 类模板名<虚拟类型参数>::成员函数名(函数形参表列){}
总结:抽象技术
抽象 实例
类是对象的抽象 对象是类的实例
类模板是类的抽象 类是类模板的实例
template<class T1,class T2> someclass<int ,double>obj1;
class someclass{...} someclass<float,long>obj2;
.......
Standard Template Library标准模板库-------------c++中的精华
在C++标准中,STL被组织为下面的17个头文件:<algorithm>、<deque>、<functional>、<iterator>、<array>、<vector>、<list>、<forward_list>、<map>、<unordered_map>、<memory>、<numeric>、<queue>、<set>、<unordered_set>、<stack>和<utility>。