建立一个有理数的类

作者在 2010-09-19 13:46:23 发布以下内容
我c++还没学扎实,学校已经又开了一门数据结构的课,第一道题目是:建立一个有理数的类。以下是我写的代码,请高手帮忙看看对不对。如果不对请耐心指出,谢谢。如果可以顺带告诉我有没有更为简洁的方法。从今我需要干什么。
#include <iostream>
#include <stdlib.h>                             //头文件函数
using namespace std;
class CRational                                 //定义一个有理数的类
{
private:
  int m;                                        //分子
  int n;                                         //分母
public:
  CRational();                                //无参数的构造函数。构造函数,用户不需调用它,而是建立对象时自动执行
  CRational(int a,int b);                       //带分子分母参数的构造函数
  CRational operator=(const CRational& obj);   //重载赋值运算符
  CRational operator+(const CRational& obj);   // 重载+号运算符
  CRational operator-(const CRational& obj);
  CRational operator*(const CRational& obj);
  CRational operator/(const CRational& obj);
  CRational operator==(const CRational& obj);
  CRational operator!=(const CRational& obj);
  CRational operator>=(const CRational& obj);
  CRational operator<=(const CRational& obj);
  void Display(void)                             //显示此有理数
  {
    cout<<m<<"/"<<n<<endl;
  }    
};
CRational::CRational()
{
  m=0;
  n=1;
}
CRational::CRational(int a,int b)
{
  m=a;
  n=b;
}   
CRational CRational::operator=(const CRational& obj)
{
  m=obj.m;
  n=obj.n;
  return *this;
}    
CRational CRational::operator+(const CRational& obj)
{
  int a=m*obj.n+n*obj.m;
  int b=n*obj.n;
  int p=a,q=b;
  while(true)                    //用辗转相除法求a,b的最大公因子
  {
               
    int y=p%q;
    if(y==0)                       //找到最大公因子,即为q
    {
               
      a=a/q;
      b=b/q;
      break;                        //退出循环
    }
    p=q;
    q=y;    
  }
  CRational c(a,b);
  return c;   
}   
CRational CRational::operator-(const CRational& obj)
{
  int a=m*obj.n-n*obj.m;
  int b=n*obj.n;
  int p=a,q=b;
  while(true)                    //用辗转相除法求a,b的最大公因子
  {
               
    int y=p%q;
    if(y==0)                       //找到最大公因子,即为q
    {
               
      a=a/q;
      b=b/q;
      break;                        //退出循环
    }
    p=q;
    q=y;    
  }
  CRational c(a,b);
  return c;
}
CRational CRational::operator*(const CRational& obj)
{
  int a=m*obj.m;
  int b=n*obj.n;
  int p=a,q=b;
  while(true)                    //用辗转相除法求a,b的最大公因子
  {
               
    int y=p%q;
    if(y==0)                       //找到最大公因子,即为q
    {
               
      a=a/q;
      b=b/q;
      break;                        //退出循环
    }
    p=q;
    q=y;    
  }
  CRational c(a,b);
  return c;
}
CRational CRational::operator/(const CRational& obj)
{int a=m*obj.n;
 int b=n*obj.m
 int p=a,q=b;
  while(true)                    //用辗转相除法求a,b的最大公因子
  {
               
    int y=p%q;
    if(y==0)                       //找到最大公因子,即为q
    {
               
      a=a/q;
      b=b/q;
      break;                        //退出循环
    }
    p=q;
    q=y;    
  }
  CRational c(a,b);
  return c;
}
CRational CRational::operator==(const CRational& obj)
{int m=a,n=b;
  while(true)                    //用辗转相除法求a,b的最大公因子
  {
               
    int y=m%n;
    if(y==0)                       //找到最大公因子,即为q
    {
               
      a=a/m;
      b=b/n;
      break;                        //退出循环
    }
    m=n;
    n=y;    
  }
  CRational c(m,n);
  return c;
  int obj.m=a,n=obj.b;
  while(true)                    //用辗转相除法求a,b的最大公因子
  {
               
    int y=obj.m%obj.n;
    if(y==0)                       //找到最大公因子,即为q
    {
               
      a=a/obj.m;
      b=b/obj.n;
      break;                        //退出循环
    }
    obj.m=obj.n;
    obj.n=y;    
  }
  CRational a(obj.m,obj.n);
  return a;
  if (m==obj.m&&n==obj.n)
 return true;
  else 
    return false;
}
CRational CRational::operator!=(const CRational& obj)
{int m=a,n=b;
  while(true)                    //用辗转相除法求a,b的最大公因子
  {
               
    int y=m%n;
    if(y==0)                       //找到最大公因子,即为q
    {
               
      a=a/m;
      b=b/n;
      break;                        //退出循环
    }
    m=n;
    n=y;    
  }
  CRational c(m,n);
  return c;
  int obj.m=a,n=obj.b;
  while(true)                    //用辗转相除法求a,b的最大公因子
  {
               
    int y=obj.m%obj.n;
    if(y==0)                       //找到最大公因子,即为q
    {
               
      a=a/obj.m;
      b=b/obj.n;
      break;                        //退出循环
    }
    obj.m=obj.n;
    obj.n=y;    
  }
  CRational a(obj.m,obj.n);
  return a;
  if (m==obj.m&&n==obj.n)
 return false;
  else 
    return true;
}
CRational CRational::operator>=(const CRational& obj)
{
  int a=m*obj.n-n*obj.m;
  int b=n*obj.n;
  if(a*b>=0)
 return true;
  else
     return false;
}
CRational CRational::operator<=(const CRational& obj)
{
  int a=m*obj.n-n*obj.m;
  int b=n*obj.n;
  if(a*b<=0)
 return true;
  else
     return false;
}
int main(int argc, char *argv[])
{
  CRational r1(2,6),r2(1,6),r3;
  r3=r1+r2;
  r3.Display();
  system("PAUSE"); 
  return 0;
}
c++ | 阅读 436 次
文章评论,共0条
游客请输入验证码
浏览436次
文章分类
文章归档
最新评论