标题:VC6.0中,分数计算器,应该怎么定义整数类才能使派生分数类有效????
只看楼主
stillhzh
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2015-4-11
结帖率:0
已结贴  问题点数:20 回复次数:3 
VC6.0中,分数计算器,应该怎么定义整数类才能使派生分数类有效????
#include<iostream.h>
void huajian(int x,int y)
{  int i=2;
   for(i=2;;i++)
   {
       if((x%i==0)||(y%i==0))
       {    x=x/i;
            y=y/i;
       }
   }
}

class Zhengshu{
private:
    int a;//分母
    int b;//分子
public:
    Zhengshu(int a=0,int b=1);
};

Zhengshu::Zhengshu(int a1,int b1)
{ a=a1;
  b=b1;
}

class Fenshu:public Zhengshu{
public:
    Fenshu(int a,int b):Zhengshu(a,b)
    {}
    Fenshu operator+(Fenshu f);
    Fenshu operator-(Fenshu f);
    Fenshu operator*(Fenshu f);
    Fenshu operator/(Fenshu f);
    friend operator>>(istream& in,Fenshu &f);
    friend operator<<(ostream& out,Fenshu &f);
    friend void jiancha(Fenshu &f);     //异常处理
};

Fenshu Fenshu::operator +(Fenshu f)
{  Fenshu s;
   s.a=a*f.b+b*f.a;
   s.b=b*f.b;
   return huajian(s.a,s.b);
}

Fenshu Fenshu::operator - (Fenshu f)
{  Fenshu s;
   s.a=a*f.b-b*f.a;
   s.b=b*f.b;
   return huajian(s.a,s.b);
}

Fenshu Fenshu::operator *(Fenshu f)
{  Fenshu s;
   s.a=a*f.a;
   s.b=b*f.b;
   return huajian(s.a,s.b);
}

Fenshu Fenshu::operator /(Fenshu f)
{  Fenshu s;
   s.a=a*f.b;
   s.b=b*f.a;
   return huajian(s.a,s.b);
}

void jiancha(Fenshu &f)
{  
    try
    {
    cin>>f;
    }
    catch(int)
    {  
        cout<<"分母不能为0,请重新输入:"<<endl;
        cin>>f;
    }
    catch(char)
    {
        cout<<"分数格式不对,请重新输入:"<<endl;
        cin>>f;
    }
}

operator>>(istream& in,Fenshu &f)
{  in>>f.a>>f.b>>endl;
   if(f.b==0)
   {
       throw f.b;
   }
   else if((f.a>='a')||(f.a<='z')||(f.b>='a')||(f.b<='z'))
   {
       throw f;
   }
   else
       return in;
}

operator<<(ostream& out,Fenshu &f)
{  out<<f.a<<"/"<<f.b<<endl;
   return out;
}

int main()
{  Fenshu a1,a2;
   char k;
   int m
   cout<<"---------------------------------------"<<endl;
   cout<<"【1】加法"<<"【2】减法"<<endl<<"【3】乘法"<<"【4】除法"<<endl<<"【5】退出"<<endl;
   cout<<"---------------------------------------"<<endl;
   do{  
       cout<<"请选择你的菜单(1~5):";
       cin>>m;
       if(m<1||m>5)
       {  cout<<"无此选项,请重新输入!"
       }
       else
       {
           cout<<"请输入第一个分数:";
           cin>>a1;
           jiancha(a1);
           cout<<"请输入第二个分数:";
           cin>>a2;
           jiancha(a2);
           switch(m)
           {
           case(1):
               cout<<"a1+a2="<<a1+a2<<endl;
               break;
           case(2):
               cout<<"a1-a2="<<a1-a2<<endl;
               break;
           case(3):
               cout<<"a1*a2="<<a1*a2<<endl;
               break;
           case(4):
               cout<<"a1/a2="<<a1/a2<<endl;
               break;
           case(5):
               return 0;
               break;
           }
       }
   }while(1);

}
搜索更多相关主题的帖子: 计算器 private include public 
2015-05-24 23:25
yuccn
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:何方
等 级:版主
威 望:167
帖 子:6809
专家分:42393
注 册:2010-12-16
得分:10 
目测第一个函数死循环啦,而且算法也大错啦吧

我行我乐
我的博客:
http://blog.yuccn. net
2015-05-25 13:06
stillhzh
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2015-4-11
得分:0 
回复 2楼 yuccn
后面的我再改,现在就想问下整数类怎么定义才能正确的使用派生类
2015-05-25 13:41
yangfrancis
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:贵宾
威 望:141
帖 子:1510
专家分:7661
注 册:2014-5-19
得分:10 
非得派生吗?你那个整数类的定义本身就已经很象分数类了,只要把分母缺省值0拿走。
2015-05-29 10:34



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-445722-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.887144 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved