|
发表于 2019-10-29 13:40:48
|
显示全部楼层
//实现有理数的加减乘除
//1/8 + 7/8=1
//1/8 * 7/8=7/64
//1/8 / 7/8=1/7
//1/8 - 7/8=-6/8
//思路把分数拆成分子和分母
#include <iostream>
using namespace std;
//operator 重载运算符C++不允许的五个运算符
//.成员访问运算符
//.* 成员指针运算符
//:: 域运算符
//sizeof 尺寸运算符
//?: 条件运算符 三目
class RationalNumber//复数基类
{
public:
RationalNumber();//基类构造器
RationalNumber(int molecular,int denominator);//基类构造器重载
friend RationalNumber operator+(RationalNumber &A,RationalNumber &B);//重载加法
friend RationalNumber operator-(RationalNumber &A,RationalNumber &B);//重载减法
friend RationalNumber operator*(RationalNumber &A,RationalNumber &B);//重载乘法
friend RationalNumber operator/(RationalNumber &A,RationalNumber &B);//重载除法
int FractionalReduction(int n,int m);//分式化简函数
void print();
private://私有变量只有基类的方法才能调用
double mole;//分子
double denom;//分母
};
RationalNumber::RationalNumber()//如果主函数建立类的对象没有参数的话 那么实数部分和虚数部分初始化为0
{
mole =0; //分子初始化为0
denom=0;//分母初始化为0
}
RationalNumber::RationalNumber(int molecular,int denominator)//如果主函数建立类的对象有参数的话 那么实数部分=r;虚数部=i 同一个作用范围是重载
{
mole =molecular; //分子初始化为0
denom=denominator;//分母初始化为0
}
int RationalNumber:: FractionalReduction(int n,int m)//分式化简函数
{
int temp,r,molecular,denominator;
molecular=n;
denominator=m;
//把大的数放在n里面
if(n<m)
{
temp=n;
n=m;
m=temp;
}
while(m!=0)
{
r=n%m;
n=m;
m=r;
}
molecular=molecular/n;
denominator=denominator/n;
std::cout<<"化简结果="<<molecular<<"/"<<denominator<<std::endl;
return n;
}
////类型 作用域 重载符号 参数
//Complex Complex::operator-(Complex &d)
//{
// Complex c;//建立Complex类的对象c
// c.real=real+d.real;//在main函数中在建立对象时无参数时real=0;有参数时等于输入参数值
// c.imag=imag+d.imag;
// return c;//这里是返回对象c的值 包括实数部分c.real 和虚数部分 c.imag
//}
//类型 作用域 重载符号 参数
RationalNumber operator+(RationalNumber &A,RationalNumber &B)
{
RationalNumber c;//建立Complex类的对象c
c.mole=A.mole*B.denom+A.denom*B.mole;//在main函数中在建立对象时无参数时real=0;有参数时等于输入参数值
c.denom=A.denom*B.denom;
return c;//这里是返回对象c的值 包括实数部分c.real 和虚数部分 c.imag
}
RationalNumber operator-(RationalNumber &A,RationalNumber &B)
{
RationalNumber c;//建立Complex类的对象c
c.mole=A.mole*B.denom-A.denom*B.mole;//在main函数中在建立对象时无参数时real=0;有参数时等于输入参数值
c.denom=A.denom*B.denom;
return c;//这里是返回对象c的值 包括实数部分c.real 和虚数部分 c.imag
}
RationalNumber operator*(RationalNumber &A,RationalNumber &B)
{
RationalNumber c;//建立Complex类的对象c
c.mole=A.mole*B.mole;//在main函数中在建立对象时无参数时real=0;有参数时等于输入参数值
c.denom=A.denom*B.denom;
return c;//这里是返回对象c的值 包括实数部分c.real 和虚数部分 c.imag
}
RationalNumber operator/(RationalNumber &A,RationalNumber &B)
{
RationalNumber c;//建立Complex类的对象c
c.mole=A.mole*B.denom;//在main函数中在建立对象时无参数时real=0;有参数时等于输入参数值
c.denom=A.denom*B.mole;
return c;//这里是返回对象c的值 包括实数部分c.real 和虚数部分 c.imag
}
void RationalNumber::print()//基类的输出函数方法
{
std::cout<<"("<<mole<<"/"<<denom<<")\n";//打印Complex类建立的对象的实数部分 和 虚数部分
FractionalReduction(mole,denom);
}
int main(int argc, char *argv[])
{
RationalNumber c1(1,14),c2(2,7),c3;
c3=c1+c2;
std::cout<<"c1= ";
c1.print();
std::cout<<"c2= ";
c2.print();
std::cout<<"c1+c2= ";
c3.print();
c3=c1-c2;
std::cout<<"c1-c2= ";
c3.print();
c3=c1*c2;
std::cout<<"c1*c2= ";
c3.print();
c3=c1/c2;
std::cout<<"c1/c2= ";
c3.print();
system("pause");
return 0;
} |
|