读书人

友元函数该如何写

发布时间: 2012-04-11 17:42:33 作者: rapoo

友元函数该怎么写?
#include <cstdio>
#include <string>
#include <iostream>
using namespace std;

template <class T> class Ts
{
private:
T s;
public:
T operator +(const Ts& n)
{
return s+n.s;
}
Ts(T y)
{
s=y;
}
template<class T>
friend T add (T n1,T n2);
};
template <class T> T add(T n1,T n2)
{
return n1+n2;
}

int _tmain(int argc, _TCHAR* argv[])
{
Ts<string> t("123");
Ts<string> t2("456");
string s=add(t.s,t2.s);
cout<<s<<endl;
system("pause");
return 0;
}

本来想用这么一个简单的程序练手,可是发现add函数实际上还是不能访问private成员.特来请应如何修改?

[解决办法]
t.s和t2.s没写在友元函数里,
可以类似这样
template <class T> T add(T n1,T n2)
{
return n1.s+n2.s;
}
调用直接
string s=add(t,t2);

[解决办法]

C/C++ code
include <iostream>#include <string>using namespace std;template <class T> class Ts{private:  T s;public:  T operator +(const Ts& n)  {    return s+n.s;  }  Ts(T y)  {    s=y;  }  friend T Add(const Ts& A,const Ts& B){    return A.s+B.s;  }};int main(int argc, char * argv[]){  Ts<string> t("123");  Ts<string> t2("456");  string s=Add(t,t2);  cout<<s<<endl;  return 0;} 

读书人网 >C++

热点推荐