作者在 2010-09-19 13:46:23 发布以下内容
我c++还没学扎实,学校已经又开了一门数据结构的课,第一道题目是:建立一个有理数的类。以下是我写的代码,请高手帮忙看看对不对。如果不对请耐心指出,谢谢。如果可以顺带告诉我有没有更为简洁的方法。从今我需要干什么。
#include <iostream>
#include <stdlib.h> //头文件函数
using namespace std;
#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;
}
};
{
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;
}
{
m=0;
n=1;
}
CRational::CRational(int a,int b)
{
m=a;
n=b;
}
{
m=a;
n=b;
}
CRational CRational::operator=(const CRational& obj)
{
m=obj.m;
n=obj.n;
return *this;
}
{
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;
{
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;
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;
}
{
CRational r1(2,6),r2(1,6),r3;
r3=r1+r2;
r3.Display();
system("PAUSE");
return 0;
}