1、在一个类模板中可以设计有缘函数
友元函数的形参类型可以是类模板或类模板的引用,对应的实参应该是该类模板实例化的模板类对象
2、函数的形参类型可以是类模板或类模板的引用对应的实参应该是该类模板实例化的模板类对象
友元函数的形参类型可以是类模板或类模板的引用,对应的实参应该是该类模板实例化的模板类对象
对于带有类模板参数的友元函数必须是函数模板
#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;
}
2、函数的形参类型可以是类模板或类模板的引用对应的实参应该是该类模板实例化的模板类对象
带有类模板参数的函数必须是函数模板
#include<iostream>
#include<string>
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);
TClass2<double> s2(-5.9); //实例化为模板类对象
fun(s1);
fun(s2);
return 0
}