创建一个名为RationalNumber的类使其具有以下功能:1创建一个构造函数它可以避免分母为0对不是最简分数的分数进行约化2重载类的关系运算符和赋值运算符
3实现加、减、乘、除四则运算符,使其可以处理两个RationalNumber对象之间的运算 4实现一个输出运算符,使其能够将RationalNumber对象以“分子/分母”的形式输出 5实现一个输入运算符,使其能够从用户输入的“分子/分母”的形式创建RationalNumber对象
以下是实现RationalNumber类的示例代码:
#include <iostream>
#include <stdexcept>
class RationalNumber {
private:
int numerator; // 分子
int denominator; // 分母
public:
RationalNumber(int num = 0, int den = 1) {
if (den == 0) {
throw std::invalid_argument("denominator cannot be zero");
}
int gcd = getGCD(num, den);
numerator = num / gcd;
denominator = den / gcd;
if (denominator < 0) {
numerator = -numerator;
denominator = -denominator;
}
}
int getNumerator() const {
return numerator;
}
int getDenominator() const {
return denominator;
}
RationalNumber operator+(const RationalNumber& other) const {
int num = numerator * other.denominator + other.numerator * denominator;
int den = denominator * other.denominator;
return RationalNumber(num, den);
}
RationalNumber operator-(const RationalNumber& other) const {
int num = numerator * other.denominator - other.numerator * denominator;
int den = denominator * other.denominator;
return RationalNumber(num, den);
}
RationalNumber operator*(const RationalNumber& other) const {
int num = numerator * other.numerator;
int den = denominator * other.denominator;
return RationalNumber(num, den);
}
RationalNumber operator/(const RationalNumber& other) const {
int num = numerator * other.denominator;
int den = denominator * other.numerator;
return RationalNumber(num, den);
}
bool operator==(const RationalNumber& other) const {
return numerator == other.numerator && denominator == other.denominator;
}
bool operator!=(const RationalNumber& other) const {
return !(*this == other);
}
bool operator<(const RationalNumber& other) const {
return numerator * other.denominator < other.numerator * denominator;
}
bool operator<=(const RationalNumber& other) const {
return numerator * other.denominator <= other.numerator * denominator;
}
bool operator>(const RationalNumber& other) const {
return numerator * other.denominator > other.numerator * denominator;
}
bool operator>=(const RationalNumber& other) const {
return numerator * other.denominator >= other.numerator * denominator;
}
RationalNumber& operator=(const RationalNumber& other) {
numerator = other.numerator;
denominator = other.denominator;
return *this;
}
friend std::ostream& operator<<(std::ostream& os, const RationalNumber& rn) {
os << rn.numerator << "/" << rn.denominator;
return os;
}
friend std::istream& operator>>(std::istream& is, RationalNumber& rn) {
int num, den;
char slash;
is >> num >> slash >> den;
rn = RationalNumber(num, den);
return is;
}
private:
int getGCD(int a, int b) const {
if (b == 0) {
return a;
}
return getGCD(b, a % b);
}
};
使用示例:
RationalNumber rn1(3, 4);
RationalNumber rn2(2, 3);
RationalNumber rn3 = rn1 + rn2;
std::cout << rn3 << std::endl; // 输出: 17/12
RationalNumber rn4 = rn1 * rn2;
std::cout << rn4 << std::endl; // 输出: 1/2
RationalNumber rn5;
std::cin >> rn5; // 输入: 5/6
std::cout << rn5 << std::endl; // 输出: 5/6
``
原文地址: https://www.cveoy.top/t/topic/fIMZ 著作权归作者所有。请勿转载和采集!