谁能用C++给我编个分数类,并且用函数实现分数加减?

急~~... 急~~ 展开
 我来答
匿名用户
2013-07-01
展开全部
#include<stdio.h>
class CFraction //分数类
{
private:
double m_numerator; //分子
double m_denominator;//分母
public:
CFraction(double dNumerator,double dDenominator)
{
m_numerator = dNumerator;
//分母不能为0,如果dDenominator为0则m_denominator赋1
m_denominator = dDenominator==0?1:dDenominator;
}
//给分子,分母赋值
void setValue(double dNumerator,double dDenominator)
{
m_numerator = dNumerator;
//分母不能为0,如果dDenominator为0则m_denominator赋1
m_denominator = dDenominator==0?1:dDenominator;
}
//获取分子的值
double getNumerator()
{
return m_numerator;
}
//获取分母的值
double getDenominator()
{
return m_denominator;
}
//获取分子除以分母的值
double getValue()
{
return m_numerator/m_denominator;
}
//获取两个分数相加的值
double operator+(CFraction objCF)
{
double denominator = 0;
double numerator = 0;
denominator = this->m_denominator * objCF.getDenominator();
numerator = this->m_numerator * objCF.getDenominator() + this->m_denominator*objCF.getNumerator();
return numerator / denominator;
}
//获取两个分数相减的值
double operator-(CFraction objCF)
{
double denominator = 0;
double numerator = 0;
denominator = this->m_denominator * objCF.getDenominator();
numerator = this->m_numerator * objCF.getDenominator() - this->m_denominator*objCF.getNumerator();
return numerator / denominator;
}
};
main()
{
CFraction fra1(1,2),fra2(1,2);
printf("1/2 + 1/2 = %g\n",fra1+fra2);
fra1.setValue(4,5);
fra2.setValue(3,5);
printf("4/5 + 3/5 = %g\n",fra1+fra2);
fra1.setValue(3,4);
fra2.setValue(1,4);
printf("3/4 - 1/4 = %g\n",fra1-fra2);

}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-07-01
展开全部
class CScore
{
public:
CScore(int x,int y)
{
m_x=x;
m_y=y;
}
int Add(int x,int y);
int Sub(int x,int y);
private:
int m_x;
int m_y;
};
int CScore::Add(int x,int y)
{
return x+y;
}
int CScore::Sub(int x,int y)
{
return x-y;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-07-01
展开全部
#include <iostream>
using namespace std;

class fenshu {
public:
fenshu(int a, int b)
: up(a), down(b)
{
if(!b)
throw "分母不能为0!\n";
}

fenshu operator+(const fenshu f)
{
fenshu a(*this);
int l = abs(lcm(down, f.down));
a.up = up*(l/down) + f.up*(l/f.down);

int i;
if((i = abs(gcd(a.up, l))) != 1)
a.up /= i, l /= i;

a.down = l;
return a;
}

fenshu operator-(const fenshu& f)
{
return *this + -f;
}

fenshu operator-() const
{
fenshu f(*this);
f.up = -f.up;
return f;
}

friend ostream& operator <<(ostream& os, const fenshu& f)
{
os << f.up << '/' << f.down;
return os;
}
friend istream& operator >>(istream& is, fenshu& f)
{
is >> f.up >> f.down;
if(f.down < 0)
f.up = -f.up, f.down = -f.down;
return is;
}
private:
int up;
int down;

static int gcd(int a, int b) { return b % a ? gcd(b % a, a) : a; }
static int lcm(int a, int b) { return (a*b)/gcd(a,b); }
};

int main()
{
fenshu a(1, 2), b(3, 4);
cout << a + b << '\n';
cout << a - b << '\n';

try {fenshu(1, 0);}
catch(const char* s) {
cout << s;
}
}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式