欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

C++运算符重载 实现有理数(分数)的加减法

程序员文章站 2022-07-10 18:30:59
...

在main前面打一个断电,单步调试,整个程序更易理解。

#include<iostream>
#include<string>
#include<stdlib.h>
class Rational
{
public:
	Rational(int num, int denom);//num 分子 denom 分母

	Rational operator+(Rational rhs);//rhs右操作数
	Rational operator-(Rational rhs);
	Rational operator*(Rational rhs);
	Rational operator/(Rational rhs);

	void print();

private:
	void normalize();//对分数的简化

	int numerator;//分子
	int denominator;//分母
};
Rational::Rational(int num, int denom)
{
	numerator = num;
	denominator = denom;
	normalize();
}
//化简
void Rational::normalize()
{
	//分母一定为正
	if (denominator < 0)
	{
		numerator = (-1)*numerator;
		denominator = (-1)*denominator;
	}
	//欧几里得算法
	int a = abs(numerator);
	int b = abs(denominator);
	//求最大公因数
	while (b > 0)
	{
		int t = a % b;
		a = b;
		b = t;
	}
	//分子分母分别除以最大公因数
	numerator = numerator / a;
	denominator = denominator / a;
}
//加
Rational Rational::operator+(Rational rhs)
{
	int a = numerator;
	int b = denominator;
	int c = rhs.numerator;
	int d = rhs.denominator;

	int e = a * d + c * b;
	int f = b * d;
	return Rational(e, f);
}
//减:减一个数等于加上这个数的相反数
Rational Rational::operator-(Rational rhs)
{
	rhs.numerator = -rhs.numerator;
	Rational result = this->operator+(rhs);
	return result;
}
//乘
Rational Rational::operator*(Rational rhs)
{
	int a = numerator;
	int b = denominator;
	int c = rhs.numerator;
	int d = rhs.denominator;

	int e = a * c;
	int f = b * d;
	return Rational(e, f);
}
//除
Rational Rational::operator/(Rational rhs)
{
	int t = rhs.numerator;
	rhs.numerator = rhs.denominator;
	rhs.denominator = t;
	Rational result = this->operator*(rhs);
	return result;
}
//打印
void Rational::print()
{
	if (numerator%denominator == 0)
	{
		std::cout << numerator / denominator;
	}
	else std::cout << numerator << "/" << denominator;
}
int main()
{
	//定义两个数
	Rational f1(-2, 3);
	Rational f2(3, 2);

	//加法
	Rational res = f1 + f2;//f1.+f2,f1是重载运算符的对象本身
	f1.print();
	std::cout << " + ";
	f2.print();
	std::cout << " = ";
	res.print();
	std::cout << std::endl << std::endl;

	//减法
	res = f1 - f2;//f1.-f2,f1是重载运算符的对象本身
	f1.print();
	std::cout << " - ";
	f2.print();
	std::cout << " = ";
	res.print();
	std::cout << std::endl << std::endl;

	//乘法
	res = f1 * f2;//f1./f2,f1是重载运算符的对象本身
	f1.print();
	std::cout << " * ";
	f2.print();
	std::cout << " = ";
	res.print();
	std::cout << std::endl << std::endl;

	//除法
	res = f1 / f2;//f1./f2,f1是重载运算符的对象本身
	f1.print();
	std::cout << " ÷ ";
	f2.print();
	std::cout << " = ";
	res.print();
	std::cout << std::endl << std::endl;

	system("pause");

}