鱼C论坛

 找回密码
 立即注册
查看: 3435|回复: 19

friend 和 public究竟啥区别

[复制链接]
发表于 2013-11-6 19:17:33 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#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;
}

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-11-6 20:54:36 | 显示全部楼层
LZ,我觉得你就没认真看过书,所以也不糊认真看别人的回复。再说了,回复也没书上说得好,所以我就不回复了。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-11-6 21:36:32 | 显示全部楼层

你说的是视频吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-11-6 21:38:03 | 显示全部楼层
cyshhm 发表于 2013-11-6 21:36
你说的是视频吗

友元函数 不是声明以后 就可以访问 另本类的 成员吗 public 不是都可以访问了 什么情况
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-11-7 12:11:03 | 显示全部楼层
天天乐,我爱你。{:1_1:}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-11-7 21:03:00 | 显示全部楼层
我已经 觉得 重头 又看一遍
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-11-7 21:04:06 | 显示全部楼层
从类开始 现在已经到17 了
看教学视频应该注意些什么

练习些什么

我感觉我严重缺乏练习 可是找不到出题的老师
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-11-7 21:53:21 | 显示全部楼层
本帖最后由 cyshhm 于 2013-11-7 21:54 编辑
吊死你 发表于 2013-11-7 12:11
天天乐,我爱你。

同学 委婉点行么!!!

受不了你这么直接!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-11-8 23:36:21 | 显示全部楼层
视频 又看到22级了 还是没发现 说了什么
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-11-8 23:39:20 | 显示全部楼层
百度也 搜了可是还是 没找到自己想要的答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-11-9 15:23:54 | 显示全部楼层
依然坐等解释 !
求真相
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-11-10 21:41:53 | 显示全部楼层
究竟有人知道是怎么用没啊
今天放假我特意去新华书店 翻了 好多本书 里面都是只讲了 friend 就是可以访问 私有部分 没讲其他的呢

求解啊 有没人知道啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-11-10 22:03:38 | 显示全部楼层
有没人知道啊 说一下啊

:funk::funk::funk::funk::funk::funk::funk::funk::funk::funk:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-11-10 22:56:50 | 显示全部楼层
cyshhm 发表于 2013-11-7 21:04
从类开始 现在已经到17 了
看教学视频应该注意些什么

<C++Primer>书中的题就够了。。这本书经典。。去看看吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-11-11 20:33:46 | 显示全部楼层
哦 你能解答我上面那个问题吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-11-11 22:29:17 | 显示全部楼层
本帖最后由 tmfish 于 2013-11-11 22:32 编辑

public成员,代表有这个属性的成员是类本身的东西,friend修饰的代表这个东西不属于类本身,但是他拥有访问类所有成员的权限。把类比作你的家庭,那么你头上就挂着public,你可以动你家的任何东西。你女朋友就挂着friend,她也可以动你家的任何东西。不过你却不能说她就是你一家人,就这么回事。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-11-12 23:00:25 | 显示全部楼层
tmfish 发表于 2013-11-11 22:29
public成员,代表有这个属性的成员是类本身的东西,friend修饰的代表这个东西不属于类本身,但是他拥有访问 ...

这个不是能不能说的问题 这个是能不能访问的问题
你的说法几乎都是错误的吧

这个说法就是 问问权限不是 不是属不属于的问题吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-11-12 23:09:59 | 显示全部楼层
cyshhm 发表于 2013-11-12 23:00
这个不是能不能说的问题 这个是能不能访问的问题
你的说法几乎都是错误的吧

error C2679: binary '<<' : no operator defined which takes a right-hand operand of type 'struct js' (or there is no acceptable conversion)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-11-12 23:17:24 | 显示全部楼层
最后公布答案 新华书店 翻书两个小时 网上查阅无数次
充分说明了 我对friend 的理解相当正确

这个题貌似 和编译器 有关
只需要把重载<<的函数放在 main 函数前面定义 即可 恢复正常

这个问题的解决过程 也充分说明了  friend 也只有 提供一个访问权限的功能 本人请测结果
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2013-11-12 23:19:36 | 显示全部楼层
本帖最后由 cyshhm 于 2013-11-12 23:20 编辑

我只想对 版主说一句 你的回答太不负责了!

并不是对这个知识点的理解有问题

貌似这个问题和 friend 这个知识点 毫不相关!

貌似这知识一个编译器问题!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-25 10:37

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表