C++模板类与友元函数的有关问题,请高手赐教
C++模板类与友元函数的问题,请高手赐教
#include<iostream.h>
template <class T>
class X
{
private:
T n;
public:
X(T i) { n=i; }
friend void f(X <T> &s)
{ s.n=2*s.n; }
void disp()
{ cout<<"n="<<n<<endl; }
};
int main()
{
X<int> s1(2);
X<double> s2(1.23);
s1.disp();
s2.disp();
f(s1);
f(s2);
return 0;
}
//程序运行结果:
//n=2 ?????为什么n不是4
//n=1.23 ?????为什么n不是2.46
------解决方案--------------------
int main()
{
X<int> s1(2);
X<double> s2(1.23);
//初始化完后,s1.n = 2, s2.n = 1.23
s1.disp(); //打印s1.n,当然是n = 2
s2.disp(); //打印s2.n, 当然是n = 1.23
f(s1);
f(s2);
return 0;
}
有什么不对
------解决方案--------------------
#include<iostream.h>
template <class T>
class X
{
private:
T n;
public:
X(T i) { n=i; }
friend void f(X <T> &s)
{ s.n=2*s.n; }
void disp()
{ cout<<"n="<<n<<endl; }
};
int main()
{
X<int> s1(2);
X<double> s2(1.23);
s1.disp();
s2.disp();
f(s1);
f(s2);
return 0;
}
//程序运行结果:
//n=2 ?????为什么n不是4
//n=1.23 ?????为什么n不是2.46
------解决方案--------------------
int main()
{
X<int> s1(2);
X<double> s2(1.23);
//初始化完后,s1.n = 2, s2.n = 1.23
s1.disp(); //打印s1.n,当然是n = 2
s2.disp(); //打印s2.n, 当然是n = 1.23
f(s1);
f(s2);
return 0;
}
有什么不对
------解决方案--------------------
- C/C++ code
#include<iostream.h> template <class T> class X { private: T n; public: X(T i) { n = i; } friend void f(X <T> &s) { s.n = 2 * s.n; } void disp() { cout << "n=" << n << endl; } }; int main() { X<int> s1(2); X<double> s2(1.23); f(s1); f(s2); s1.disp(); s2.disp(); return 0; }