friend 和 public究竟啥区别
#include<iostream>class js
{
//friend std::ostream& operator<<(std::ostream& a,js f); //这一句注释掉和不注释掉的区别 为什么注释掉会错误
js fsjh(js &abc)//分数简化
{
int t,x,y;
if(abc.i<0)
{
x=-abc.i;
}
else
{
x=abc.i;
}
if(abc.j<0)
{
y=-abc.j;
}else
{
y=abc.j;
}
while(x>0)
{
t=y%x;
y=x;
x=t;
}
abc.i/=y;
abc.j/=y;
return abc;
};
public:
int a,b;//加减 前后
int i,j;//分子 分母
js(int i,int j)
{
if(j<0)
{
this->i=-i;
this->j=-j;
}else
{
this->i=i;
this->j=j;
}
};
js(js &abc)
{
this->i=abc.i;
this->j=abc.j;
};
js()
{
i=1;
j=1;
};
js operator*(js &abc)
{
js c;
c.i=abc.i*i;
c.j=abc.j*j;
return fsjh(c);
}
js operator/(js &abc)
{
js c;
c.i=i*abc.j;
c.j=j*abc.i;
return fsjh(c);
}
js operator-(js &b)
{
b.i=-b.i;
return operator+(b);
}
js operator+(js &b)
{
js c;
c.i=i*b.j+b.i*j;//例如 a/b+c/d (a*d+c*b)/(d*b)
c.j=j*b.j;
return fsjh(c);
};
void dy()
{
printf("%d/%d",i,j);
};
};
std::ostream& operator<<(std::ofstream& a,js f);
int main()
{
js a,b(1,-3),c(1,5);
a=b+c;
char jj='+';
if(c.i<0)
{
c.i=-c.i;
jj='-';
}
std::cout<<b<<" + "<<c<<" = "<<b+c<<"\n";
return 0;
}
std::ostream& operator<<(std::ostream& a,js f)
{
a<<f.i<<"/"<<f.j;
return a;
}
LZ,我觉得你就没认真看过书,所以也不糊认真看别人的回复。再说了,回复也没书上说得好,所以我就不回复了。。。 仰望天上的光 发表于 2013-11-6 20:54 static/image/common/back.gif
LZ,我觉得你就没认真看过书,所以也不糊认真看别人的回复。再说了,回复也没书上说得好,所以我就不回复了 ...
你说的是视频吗 cyshhm 发表于 2013-11-6 21:36 static/image/common/back.gif
你说的是视频吗
友元函数 不是声明以后 就可以访问 另本类的 成员吗 public 不是都可以访问了 什么情况 天天乐,我爱你。{:1_1:} 我已经 觉得 重头 又看一遍 从类开始 现在已经到17 了
看教学视频应该注意些什么
练习些什么
我感觉我严重缺乏练习 可是找不到出题的老师 本帖最后由 cyshhm 于 2013-11-7 21:54 编辑
吊死你 发表于 2013-11-7 12:11 static/image/common/back.gif
天天乐,我爱你。
同学 委婉点行么!!!
受不了你这么直接!!!
视频 又看到22级了 还是没发现 说了什么 百度也 搜了可是还是 没找到自己想要的答案 依然坐等解释 !
求真相 究竟有人知道是怎么用没啊
今天放假我特意去新华书店 翻了 好多本书 里面都是只讲了 friend 就是可以访问 私有部分 没讲其他的呢
求解啊 有没人知道啊 有没人知道啊 说一下啊
:funk::funk::funk::funk::funk::funk::funk::funk::funk::funk: cyshhm 发表于 2013-11-7 21:04 static/image/common/back.gif
从类开始 现在已经到17 了
看教学视频应该注意些什么
<C++Primer>书中的题就够了。。这本书经典。。去看看吧 哦 你能解答我上面那个问题吗 本帖最后由 tmfish 于 2013-11-11 22:32 编辑
public成员,代表有这个属性的成员是类本身的东西,friend修饰的代表这个东西不属于类本身,但是他拥有访问类所有成员的权限。把类比作你的家庭,那么你头上就挂着public,你可以动你家的任何东西。你女朋友就挂着friend,她也可以动你家的任何东西。不过你却不能说她就是你一家人,就这么回事。
tmfish 发表于 2013-11-11 22:29 static/image/common/back.gif
public成员,代表有这个属性的成员是类本身的东西,friend修饰的代表这个东西不属于类本身,但是他拥有访问 ...
这个不是能不能说的问题 这个是能不能访问的问题
你的说法几乎都是错误的吧
这个说法就是 问问权限不是 不是属不属于的问题吧 cyshhm 发表于 2013-11-12 23:00 static/image/common/back.gif
这个不是能不能说的问题 这个是能不能访问的问题
你的说法几乎都是错误的吧
error C2679: binary '<<' : no operator defined which takes a right-hand operand of type 'struct js' (or there is no acceptable conversion)
最后公布答案 新华书店 翻书两个小时 网上查阅无数次
充分说明了 我对friend 的理解相当正确
这个题貌似 和编译器 有关
只需要把重载<<的函数放在 main 函数前面定义 即可 恢复正常
这个问题的解决过程 也充分说明了friend 也只有 提供一个访问权限的功能 本人请测结果 本帖最后由 cyshhm 于 2013-11-12 23:20 编辑
我只想对 版主说一句 你的回答太不负责了!
并不是对这个知识点的理解有问题
貌似这个问题和 friend 这个知识点 毫不相关!
貌似这知识一个编译器问题!!!
页:
[1]