示例#1
0
void TestConstructorsAndCopy() {
  ScopedPass pass("Rational::[Rational/operator=/Flip]()");
  
  Rational<unsigned int> rat;
  assert(rat.GetNumerator() == 0);
  assert(rat.GetDenominator() == 1);
  
  Rational<unsigned int> rat1(7);
  assert(rat1.GetNumerator() == 7);
  assert(rat1.GetDenominator() == 1);
  
  Rational<unsigned int> rat2(7, 2);
  assert(rat2.GetNumerator() == 7);
  assert(rat2.GetDenominator() == 2);
  
  rat = rat2;
  assert(rat.GetNumerator() == 7);
  assert(rat.GetDenominator() == 2);
  
  rat2 = rat.Flip();
  assert(rat.GetNumerator() == rat2.GetDenominator());
  assert(rat.GetDenominator() == rat2.GetNumerator());
  assert(rat2.GetNumerator() == 2);
  assert(rat2.GetDenominator() == 7);
}
示例#2
0
bool Rational::operator==(Rational& r)
{
	Rational rational(this->GetNumerator(), this->GetDenominator());
	
	int l_GCD = GCD(this->GetNumerator(), this->GetDenominator());
	Update(l_GCD, rational);

	int r_GCD = GCD(r.GetNumerator(), r.GetDenominator());
	Update(r_GCD, r);

	if (rational.GetNumerator() == r.GetNumerator() && rational.GetDenominator() == r.GetDenominator()) return true; 
	else return false; 

}
示例#3
0
bool Rational::operator<(Rational& r)
{
	double _tempLeft = std::round(this->GetNumerator() / this->GetDenominator());
	double _tempRight = std::round(r.GetNumerator() / r.GetDenominator());

	if (_tempLeft < _tempRight) return true;
	else return false;
}
示例#4
0
Rational Rational::operator/(Rational& r)
{
	Rational rational;
	rational.SetNumerator(this->m_Numerator * r.m_Denominator);
	rational.SetDenominator(this->m_Denominator * r.m_Numerator);
	int gcd = GCD(rational.GetNumerator(), rational.GetDenominator());
	Update(gcd, rational);
	return rational; 
}
示例#5
0
Rational Rational::operator-(Rational& r)
{
	Rational rational; //Object to return 
	rational.m_Numerator = this->m_Numerator - r.m_Numerator;
	rational.SetDenominator(r.GetDenominator());
	int gcd = GCD(rational.GetNumerator(), rational.GetDenominator());
	Update(gcd, rational);
	return rational; 
}