鱼C论坛

 找回密码
 立即注册
查看: 1451|回复: 1

public和friend两个方法的区别!

[复制链接]
发表于 2013-11-5 21:15:22 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 cyshhm 于 2013-11-5 21:23 编辑

#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 19:00:13 | 显示全部楼层
来顶一个啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-17 12:36

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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