急求c++源程序

2025-12-25 10:45:01
推荐回答(4个)
回答1:

我给你加上了消除公约数和输出符的重载,VC6.0下可运行
#include
#include

class Rational
{
public:
//构造函数
Rational(int num1=0,int den1=1);
//重载运算符
const Rational operator+(const Rational &r);
const Rational operator-( const Rational &r);
const Rational operator*( const Rational &r);
const Rational operator/( const Rational &r);
//重载输出符
friend ostream& operator <<(ostream& outs,const Rational &r);

private:
//定义一个有理数num为分子,den为分母
int num, den;
void Reduction (); //约分
};

Rational::Rational(int num1/* =0 */,int den1/* =1 */)
{
num = num1;
den = den1;
}

const Rational Rational::operator+(const Rational& r)
{
Rational temp;
temp.den = this->den * r.den;
temp.num = this->num * r.den + this->den * r.num;
temp.Reduction();

return temp;
}

const Rational Rational::operator-(const Rational& r)
{
Rational temp;
temp.den = this->den * r.den;
temp.num = this->num * r.den - this->den * r.num;
temp.Reduction();

return temp;
}

const Rational Rational::operator*(const Rational& r)
{
Rational temp;
temp.den = this->den * r.den;
temp.num = this->num * r.num;
temp.Reduction();

return temp;
}

const Rational Rational::operator/(const Rational& r)
{
Rational temp;
temp.den = this->den * r.num;
temp.num = this->num * r.den;
temp.Reduction();

return temp;
}

void Rational::Reduction()
{
int i,z;
if (den==0)
{
cout<<"data error"< }
z=den>num?den:num;
for(i=2;i<=sqrt(z);i++)
while(den%i==0 && num%i==0)//here
{
den=den/i;
num=num/i;
}
}

ostream& operator<<(ostream& outs, const Rational& r)
{
outs< return outs;
}

int main()
{
Rational r1(1,2),r2(1,3);
cout<<"r1:"< cout<<"r2:"<
cout<<"r1+r2="< cout<<"r1-r2="< cout<<"r1*r2="< cout<<"r1/r2="< return 0;
}

回答2:

#include
using namespace std;
class Rational
{
public:
//构造函数
Rational(int num1=0,int den1=1):num(num1),den(den1){for(int i=num;i>1;i--)if(num%i==0&&den%i==0)num/=i,den/=i,i=1;}
//重载运算符
const Rational operator+(const Rational &r){return Rational(num*r.den+r.num*den,den*r.den);}
const Rational operator-( const Rational &r){return Rational(num*r.den-r.num*den,den*r.den);}
const Rational operator*( const Rational &r){return Rational(num*r.num,den*r.den);}
const Rational operator/( const Rational &r){return Rational(num*r.den,den*r.num);}
friend ostream& operator<<( ostream& os, const Rational& r){return os<private:
//定义一个有理数num为分子,den为分母
int num, den;
};
int main()
{
Rational a(2,3),b(1,6);
cout << a+b << endl;
cout << a-b << endl;
cout << a*b << endl;
cout << a/b << endl;
return 0;
}

回答3:

一楼正解。

回答4:

class Rational
{
public:
//
Rational( int num1 = 0, int den1 = 1 )
{
num = num1;
den = den1;
}
//
const Rational& operator + ( const Rational & r );
const Rational& operator - ( const Rational & r );
const Rational& operator * ( const Rational & r );
const Rational& operator / ( const Rational & r );

int GetNum(){ return num; }
int GetDen(){ return den; }

private:
int num,den;

};

const Rational& Rational::operator+( const Rational & r )
{
return Rational( num*r.den + den*r.num, den*r.den );
}

const Rational& Rational::operator-( const Rational & r )
{
return Rational( num*r.den - den*r.num, den*r.den );
}

const Rational& Rational::operator*( const Rational & r )
{
return Rational( num*r.num, den*r.den );
}

const Rational& Rational::operator/( const Rational & r )
{
return Rational( num*r.den, den*r.num );
}

int main(int argc, char* argv[])
{
Rational a(3,4),b(5,6),c;
c = a+b;
cout< c = a-b;
cout< c = a*b;
cout< c = a/b;
cout< return 0;
}