需求概述
(1)设计一个分数计算器,进行分数的算术运算和逻辑运算。
(2)能够像使用基本数据的对象一样,对分数进行“+”、“-”、“*”和“/”等算术运算和比较两个分数的大小。
(3)以a/b的形式输入输出分数,允许输入输出整数这种特殊形式。
(4)对不是约化型的分数进行约化,避免分母为负数。
(5)如果分数的分母为0、除数为0或输入时格式有错,采用异常处理机制解决。
输入
以分数的形式输入。(如1/2)
若分母为0会抛出异常,重新输入。
菜单页面
RationalNumber.h(头文件)
#ifndef RATIONAL_NUMBER_H
#define RATIONAL_NUMBER_H
class RationalNumber
{
public:
RationalNumber( int = 0, int = 1 ); // 默认构造函数
RationalNumber &operator+(const RationalNumber&);
RationalNumber operator-(const RationalNumber&);
RationalNumber operator*(const RationalNumber&);
RationalNumber operator/(const RationalNumber&);
// 关系运算符
bool operator>(const RationalNumber&)const;
bool operator<(const RationalNumber&)const;
bool operator>=(const RationalNumber&)const;
bool operator<=(const RationalNumber&)const;
// 判等运算符
bool operator==(const RationalNumber&)const;
bool operator!=(const RationalNumber&)const;
void printRational() const; // 以分数形式显示
private:
int numerator; // 私有变量 分子
int denominator; //私有变量 分母
void reduction(); // 分数约分
}; // end class RationalNumber
#endif
RationalNumber.cpp
#include <cstdlib>
#include <iostream>
using namespace std;
#include "RationalNumber.h"
// RationalNumber 构造函数设置a和b并经行约分
RationalNumber::RationalNumber(int a, int b)
{
if (b <= 0)
b = 1;
numerator = a;
denominator = b;
reduction();
}
//重载+运算符
RationalNumber &RationalNumber::operator+(const RationalNumber &right)
{
RationalNumber temp;
if(denominator==right.denominator)
{
temp.numerator=numerator+right.numerator;
temp.denominator=denominator;
}
else
{
temp.numerator=numerator*right.denominator+denominator*right.numerator;
temp.denominator=denominator*right.denominator;
}
temp.reduction();
return temp;
}
// 重载-运算符
RationalNumber RationalNumber