编写c++程序创建一个名为RationalNumber的类使其具有以下功能:1创建一个构造函数它可以避免分母为0对不是约化性的分数进行约化并且可以避免分母为负数。 2重载类的加减乘除运算符
#include
class RationalNumber { private: int numerator; // 分子 int denominator; // 分母
public: RationalNumber(int num = 0, int den = 1) { if (den == 0) { cout << "Error: denominator cannot be zero!" << endl; exit(EXIT_FAILURE); } 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;
}
friend RationalNumber operator+(const RationalNumber& r1, const RationalNumber& r2) {
int num = r1.numerator * r2.denominator + r2.numerator * r1.denominator;
int den = r1.denominator * r2.denominator;
return RationalNumber(num, den);
}
friend RationalNumber operator-(const RationalNumber& r1, const RationalNumber& r2) {
int num = r1.numerator * r2.denominator - r2.numerator * r1.denominator;
int den = r1.denominator * r2.denominator;
return RationalNumber(num, den);
}
friend RationalNumber operator*(const RationalNumber& r1, const RationalNumber& r2) {
int num = r1.numerator * r2.numerator;
int den = r1.denominator * r2.denominator;
return RationalNumber(num, den);
}
friend RationalNumber operator/(const RationalNumber& r1, const RationalNumber& r2) {
int num = r1.numerator * r2.denominator;
int den = r1.denominator * r2.numerator;
return RationalNumber(num, den);
}
private: // 获取最大公约数 int getGCD(int a, int b) { if (b == 0) { return abs(a); } else { return getGCD(b, a % b); } } };
int main() { RationalNumber r1(3, 4); RationalNumber r2(5, 6); RationalNumber r3 = r1 + r2; RationalNumber r4 = r1 - r2; RationalNumber r5 = r1 * r2; RationalNumber r6 = r1 / r2; cout << r1.getNumerator() << "/" << r1.getDenominator() << " + " << r2.getNumerator() << "/" << r2.getDenominator() << " = " << r3.getNumerator() << "/" << r3.getDenominator() << endl; cout << r1.getNumerator() << "/" << r1.getDenominator() << " - " << r2.getNumerator() << "/" << r2.getDenominator() << " = " << r4.getNumerator() << "/" << r4.getDenominator() << endl; cout << r1.getNumerator() << "/" << r1.getDenominator() << " * " << r2.getNumerator() << "/" << r2.getDenominator() << " = " << r5.getNumerator() << "/" << r5.getDenominator() << endl; cout << r1.getNumerator() << "/" << r1.getDenominator() << " / " << r2.getNumerator() << "/" << r2.getDenominator() << " = " << r6.getNumerator() << "/" << r6.getDenominator() << endl; return 0;
原文地址: https://www.cveoy.top/t/topic/fIPs 著作权归作者所有。请勿转载和采集!