用C++写一个类的程序 5

用C++写一个类的程序编写一个符合下列要求的类FenShuJiSuan,以及相应的测试函数。类的私有数据成员包括:用整型变量表示的分子和分母。类中需要有一个构造函数,使类... 用C++写一个类的程序编写一个符合下列要求的类FenShuJiSuan,以及相应的测试函数。
类的私有数据成员包括:用整型变量表示的分子和分母。
类中需要有一个构造函数,使类的对象在声明时得到初始化,这个构造函数中应包含默认值,以应对未提供初始化值的情况,并且需要以简化的形式保存分数。例如3/6在对象中应该保存为1/2的形式。
类中的成员函数需要提供的功能如下:
两个分数相加、减、乘、除,用简化的形式保存结果;
分别用分数及浮点数的形式打印输出结果。
展开
 我来答
物理公司的
2016-11-25 · TA获得超过5695个赞
知道大有可为答主
回答量:6105
采纳率:86%
帮助的人:1374万
展开全部
#include <iostream>
using namespace std;

class FenShuJiSuan
{
private:
int m_fenzi; // 分子
int m_fenmu; // 分母
public:
FenShuJiSuan();
FenShuJiSuan(int fenzi, int fenmu);
~FenShuJiSuan() {}
void set(int fenzi, int fenmu);
const FenShuJiSuan operator+(const FenShuJiSuan &b);
const FenShuJiSuan operator-(const FenShuJiSuan &b);
const FenShuJiSuan operator*(const FenShuJiSuan &b);
const FenShuJiSuan operator/(const FenShuJiSuan &b);
float toFloat() {return (float) m_fenzi / (float) m_fenmu;}
friend ostream &operator<<(ostream& out, const FenShuJiSuan &a);
};

int maxY(int a, int b); // 求两个数的最大公约数
void calc(FenShuJiSuan &a, char op);

int main()
{
int fenzi, fenmu;
cout << "请输入分子:";
cin >> fenzi;
cout << "请输入分母:";
cin >> fenmu;
FenShuJiSuan a;
char op;
while (fenmu != 0) // 如果分母为0则退出
{
a.set(fenzi, fenmu);
cout << "请输入要进行的操作(0: 输出分数形式; .: 输出小数点形式; +-*/: 四则运算):" << endl;
cin >> op;
switch(op)
{
case '0':
cout << a << endl;
break;
case '.':
cout << a.toFloat() << endl;
break;
case '+':
case '-':
case '*':
case '/':
calc(a, op);
break;
default:
exit(0);
break;
}
cout << "请输入分子:";
cin >> fenzi;
cout << "请输入分母:";
cin >> fenmu;
}
return 0;
}

FenShuJiSuan::FenShuJiSuan()
{
m_fenzi = 0;
m_fenmu = 1;
}
FenShuJiSuan::FenShuJiSuan(int fenzi, int fenmu)
{
set(fenzi, fenmu);
}

void FenShuJiSuan::set(int fenzi, int fenmu)
{
if (fenmu == 0)
{
cout << "错误,分母不能为0!" << endl;
return;
}
if (fenzi == 0)
{
m_fenzi = fenzi;
m_fenmu = 1;
return;
}
// 求出最大公约数,然后简化
int maxDivisor = maxY(fenzi, fenmu);
m_fenzi = fenzi / maxDivisor;
m_fenmu = fenmu / maxDivisor;
}

const FenShuJiSuan FenShuJiSuan::operator+(const FenShuJiSuan &b)
{
int aFenzi = this->m_fenzi;
int aFenmu = this->m_fenmu;
int bFenzi = b.m_fenzi;
int bFenmu = b.m_fenmu;
int fenzi = aFenzi * bFenmu + bFenzi * aFenmu;
int fenmu = aFenmu * bFenmu;
return FenShuJiSuan(fenzi, fenmu);
}

const FenShuJiSuan FenShuJiSuan::operator-(const FenShuJiSuan &b)
{
int aFenzi = this->m_fenzi;
int aFenmu = this->m_fenmu;
int bFenzi = b.m_fenzi;
int bFenmu = b.m_fenmu;
int fenzi = aFenzi * bFenmu - bFenzi * aFenmu;
int fenmu = aFenmu * bFenmu;
return FenShuJiSuan(fenzi, fenmu);
}

const FenShuJiSuan FenShuJiSuan::operator*(const FenShuJiSuan &b)
{
int aFenzi = this->m_fenzi;
int aFenmu = this->m_fenmu;
int bFenzi = b.m_fenzi;
int bFenmu = b.m_fenmu;
int fenzi = aFenzi * bFenzi;
int fenmu = aFenmu * bFenmu;
return FenShuJiSuan(fenzi, fenmu);
}

const FenShuJiSuan FenShuJiSuan::operator/(const FenShuJiSuan &b)
{
int aFenzi = this->m_fenzi;
int aFenmu = this->m_fenmu;
int bFenzi = b.m_fenzi;
int bFenmu = b.m_fenmu;
if (bFenzi == 0)
{
cout << "计算失败,除数不能为0!" << endl;
return *this;
}
int fenzi = aFenzi * bFenmu;
int fenmu = aFenmu * bFenzi;
return FenShuJiSuan(fenzi, fenmu);
}
ostream &operator<<(ostream& out, const FenShuJiSuan &a)
{
out << a.m_fenzi << "/" << a.m_fenmu;
return out;
}
void calc(FenShuJiSuan &a, char op)
{
int fenzi, fenmu;
cout << "请输入分子:";
cin >> fenzi;
cout << "请输入分母:";
cin >> fenmu;
if (fenmu == 0)
{
cout << "错误,分母不能为0!" << endl;
return;
}
FenShuJiSuan b(fenzi, fenmu);
FenShuJiSuan c;
switch(op)
{
case '+':
c = a + b;
break;
case '-':
c = a - b;
break;
case '*':
c = a * b;
break;
case '/':
if (fenmu == 0)
{
cout << "计算失败,除数不能为0!" << endl;
return;
}
c = a / b;
break;
default:
break;
}
// 输出计算结果
cout << a << " " << op << " " << b << " " << "=" << " " << c << endl;
}

int maxY(int a, int b)
{
int min, max;
max = a > b ? a : b;
min = a < b ? a : b;
if (max % min == 0)
return min;
else
return maxY(min, max % min);
}
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式