友元函数该怎么写?
#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;}