类模板作为函数参数
函数的形参类型可以是类模板或类模板的引用,对应的实参
应该是该类模板实例化的模板类对象。
带有类模板参数的函数必须是函数模板。
#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;
}