类模板作为函数参数
函数的形参类型可以是类模板或类模板的引用,对应的实参
应该是该类模板实例化的模板类对象。
带有类模板参数的函数必须是函数模板。
#include<iostream> using namespace std; template <class T> class TClass2 { T x; public: TClass2(T a){x=a;} T abs()//成员函数模板 { if(x<0) return -x; else return x; } }; template <class T> void fun(TClass2<T> x)//函数模板 { cout<<x.abs()<<endl; } int main() { TClass2<int> s1(-5);//建立一个对象s1 TClass2<double> s2(-5.8);//建立一个对象s2 fun(s1); fun(s2); return 0; }
类模板作为友元函数的形参类型
在一个类模板中可以设计友元函数。
友元函数的形参类型可以是类模板或类模板的引用,对应的实参
应该是该类模板实例化的模板类对象。
对于带有类模板参数的友元函数必须是函数模板。
#include<iostream> using namespace std; template <class T> class TClass3 { T x; public: TClass3(){} TClass3(T a){ x=a; } friend TClass3<T> operator+(TClass3<T> s1, TClass3<T> s2); void disp(){ cout<<x<<endl; } }; template <class T> TClass3<T> operator+(TClass3<T> s1, TClass3<T> s2)//友元函数模板 { TClass3<T> tmp; tmp.x = s1.x + s2.x; return tmp; } int main() { TClass3<int> a(2),b(5),c; c = a + b; c.disp(); TClass3<double> a1(2.5), b1(5.7), c1; c1 = a1+ b1; c1.disp(); return 0; }