Question: I need help refining my code. Currently I have few absent, incomplete or diverging function descriptions, preconditions, and/or postconditions //myFraction.h #ifndef H_FRACTION #define H_FRACTION #include

I need help refining my code. Currently I have few absent, incomplete or diverging function descriptions, preconditions, and/or postconditions

//myFraction.h

#ifndef H_FRACTION #define H_FRACTION

#include

using namespace std;

class fractionType {

// operator overload friend istream & operator >> (istream & in, fractionType & this_fraction);

public:

//counstructors fractionType(int n, int d = 1);

//default constructors fractionType();

//functions friend ostream & operator<< (ostream & out, fractionType & this_fraction);

fractionType operator+ (fractionType const &f2) const; fractionType operator* (fractionType const &f2) const; fractionType operator- (fractionType const &f2) const; fractionType operator/ (fractionType const &f2) const;

bool operator==(const fractionType& lhs) const; bool operator!=(const fractionType& lhs) const;

//Overloading operators bool operator< (const fractionType &f2) const; bool operator<= (const fractionType &f2) const; bool operator> (const fractionType &f2) const;

double Evaluate(); void Reduce();

private: int numerator; int denominator; };

#endif

*****************************************************************

//myFraction.h

#include #include "myFraction.h"

using namespace std;

// constructor fractionType::fractionType(int n, int d){ numerator = n; if (d != 0) { denominator = d; } else { denominator = 1; } Reduce(); }

// defaults constructor fractionType::fractionType() { numerator = 0; denominator = 1; }

istream & operator>>(istream & in, fractionType & this_fraction) { char divSign; // used to consume the '/' character during input in >> this_fraction.numerator >> divSign >> this_fraction.denominator; this_fraction.Reduce(); return in; }

// Display ostream & operator<<(ostream & out, fractionType & f){ if (f.denominator == 1) { out << f.numerator; } else { out << f.numerator << " " << '/' << " " << f.denominator; } return out; }

bool fractionType::operator< (const fractionType &f2) const{ return (f2 - *this).Evaluate() > 0; } bool fractionType::operator<= (const fractionType &f2) const{ return (f2 - *this).Evaluate() >= 0; } bool fractionType::operator> (const fractionType &f2) const{ return (f2 - *this).Evaluate() < 0; }

// Evaluate returns the decimal equivalent of the fraction double fractionType::Evaluate() { double n = numerator; // convert numerator to double double d = denominator; // convert denominator to double return (n / d); // compute and return double representation }

// This function reduces a fraction to its lowest terms. void fractionType::Reduce() { int n = numerator < 0 ? -numerator : numerator; int d = denominator; int largest = n > d ? n : d; int gcd = 0; // greatest common divisor for (int loop = largest; loop >= 2; loop--) if (numerator % loop == 0 && denominator % loop == 0) { gcd = loop; break; } if (gcd != 0) { numerator /= gcd; denominator /= gcd; } }

// Overload of operators fractionType fractionType::operator+ (fractionType const &f2) const{ fractionType r; r.numerator = (this->numerator * f2.denominator) + (f2.numerator * this->denominator); r.denominator = this->denominator * f2.denominator; r.Reduce(); return r; }

fractionType fractionType::operator* (fractionType const &f2) const{ fractionType r; r.numerator = (this->numerator * f2.numerator); r.denominator = this->denominator * f2.denominator; r.Reduce(); return r; }

fractionType fractionType::operator- (fractionType const &f2) const{ fractionType r; r.numerator = (this->numerator * f2.denominator) - (f2.numerator * this->denominator); r.denominator = this->denominator * f2.denominator; r.Reduce(); return r; }

fractionType fractionType::operator/ (fractionType const &f2) const{ fractionType r; r.numerator = (this->numerator * f2.denominator); r.denominator = this->denominator * f2.numerator; r.Reduce(); return r; }

bool fractionType::operator==(const fractionType& l) const{ return (l.numerator == numerator) && (l.denominator == denominator); } bool fractionType::operator!=(const fractionType& l) const{ return !((*this) == l); } *****************************************************************

//main

#include #include "myFraction.h"

using namespace std;

int main() { fractionType start(3, 5), userFraction; cout << "A program to test the functionality of the class" << start << endl;

cout << "Enter fraction: "; cin >> userFraction;

cout << userFraction << endl;

fractionType add = start + userFraction; cout << add << endl; fractionType sub = start - userFraction; cout << sub << endl;

cout << (start > userFraction) << endl; cout << (start <= userFraction) << endl; cout << (start < userFraction) << endl;

cout << (start != userFraction) << endl; return 0;

}

Step by Step Solution

There are 3 Steps involved in it

1 Expert Approved Answer
Step: 1 Unlock blur-text-image
Question Has Been Solved by an Expert!

Get step-by-step solutions from verified subject matter experts

Step: 2 Unlock
Step: 3 Unlock

Students Have Also Explored These Related Databases Questions!