目前感觉对泛型编程理解的不够深,现主要对泛型简单的应用做个总结。泛型编程主要包括:函数模板和类模板
(1)函数模板:
1.1函数模板定义及使用:
template <typename T>// template 作为模板关键字,从原理上注意编译器并不是把函数模板处理成任意类型的函数
//而是编译器把函数模板通过具体的类型产生不同的函数,在定义和使用的过程中可以发现,编译器实际上对函数模板进行了两//次编译。
int compare(T &a, T &b){
if (a == b)
return 0;
return a > b ? 1:-1;
}
int main(){
int a = 10, b =11;
char* c = "abc";
char* d = "bcd";
cout << compare<int,int>(a, b) << endl;
cout << compare<char*,char*>(d,c) << endl;
return 0;
}
//此函数要比函数重载简便很多,另外感觉stl中vector、queue、map应该也是用的泛型编程技术。
(2)类模板:
2.1类模板的定义及使用
template <class type>
class Point3d{
public:
Point3d(type x,type y,type z){
_x = x;
_y = y;
_z = z;
}
void Print(){
cout << "x:" << _x<<endl;
cout << "y:" << _y<< endl;
cout << "z:" << _z<< endl;
}
private:
type _x;
type _y;
type _z;
};
int main(){
Point3d<double> p1(1,2,3);//这里要注意,使用时需指定类型
p1.Print();
return 0;
}
2.2模板类也可以派生普通类
class Point2d:public Point3d<double>{ //这就是模板类的派生。此时需要指定模板类的类型
private:type c;
}
.........更新待续