注册 登录
编程论坛 C++教室

自己编写的分数相加,运算符重载不太会,求改正

niji 发布于 2011-12-11 22:36, 677 次点击
//定义分数类,可以用初值构造分数,保证其对象的分母不为0
//重载加法运算符,即实现A+B运算(A、B是分数)
 
#include<iostream>
using namespace std;

class fenshu
{
public:
       fenshu(int m,int z);
       ~fenshu(){};
       friend fenshu operator+(fenshu &f1,fenshu &f2);
       friend ostream & operator<<(ostream &out,fenshu &o);
private:
        int fenzi;
        int fenmu;
};
//实现
fenshu::fenshu(int m,int z)
{               
   fenmu=m;
   fenzi=z;
   if(fenmu==0)
   {
       cout<<"分母不能为零!";
   }
   else
   {   
        cout<<"请重新输入一个分数:";               
        fenmu=m;
        fenzi=z;
}

fenshu operator+(fenshu &f1,fenshu &f2)
{
       return fenshu(f1.fenmu*f2.fenmu,f1.fenzi*f2.fenmu+f2.fenzi*f1.fenmu); //此处提示有错
}

ostream & operator<<(ostream &out,fenshu &o)
{
        out<<o.fenzi<<"/"<<o.fenmu<<endl;
        return out;
}

//主函数               
int main()
{   
    fenshu f1,f2,f3;
    cout<<"请输入分数f1的 分母(空格)分子:"<<endl;
    cin>>f1;
    cout<<"请输入分数f2的 分母(空格)分子:"<<endl;
    cin>>f2;     
    f3=f1+f2;
    cout<<"f1+f2="<<c3<<endl;
    return 0;
}
1 回复
#2
lonely_212011-12-12 00:02
#include<iostream>
using namespace std;

class fenshu
{
public:
       fenshu(int m=1,int z=0);
       ~fenshu(){};
       int& getfenmu()
       {
           return fenmu;
       }
       int& getfenzi()
       {
           return fenzi;
       }

      fenshu operator+(fenshu &f);
private:
        int fenzi;
        int fenmu;
};
//实现
fenshu::fenshu(int m,int z)
{               
   fenmu=m;
   fenzi=z;
   if(fenmu==0)
   {
       cout<<"分母不能为零!";
   }
   else
   {   
       cout<<"请重新输入一个分数:";               
       fenmu=m;
       fenzi=z;
   }

}  

fenshu fenshu::operator+(fenshu &f) //这块你之前似乎是不能直接调用私有成员
{
    int a=this->fenmu;
    int b=this->fenzi;
    this->fenmu=a*f.fenmu;
    this->fenzi=b*f.fenmu+f.fenzi*a;
    return *this;
}
   
ostream operator<<(ostream &out,fenshu &o)
{
    out<<o.getfenzi()<<"/"<<o.getfenmu()<<endl;
    return out;
}
void operator>>(istream &in,fenshu &o)
{
    //in>>o.getfenzi()>>"/">>o.getfenmu();
    //in>>"/";           //加这句好像就错了,不知道为什么
    in>>o.getfenzi();   
    in>>o.getfenmu();
    //return in;
}  
   //主函数               
int main()
{   
       fenshu f1,f2,f3;
       cout<<"请输入分数f1的 分母(空格)分子:"<<endl;
       cin>>f1;
       cout<<"请输入分数f2的 分母(空格)分子:"<<endl;
       cin>>f2;     
       f3=f1+f2;
       cout<<"f1+f2="<<f3<<endl;
       return 0;
}
   
我把那个友元取消了,还有之前你的程序没有重载>>输入流
1