//------------------------------------------------------------ // objct_io2 // Program to show rudimentary class declaration, // operator overloading including I/O overloading // L.Aamodt // 4/20/14 //------------------------------------------------------------ #include using namespace std; class Fraction // Class definition { public: Fraction(); // Default constructor Fraction(int num, int den); // Explicit-Value constructor friend Fraction operator *(const Fraction& fract1, const Fraction& fract2); friend double operator-(const Fraction& fract1, const Fraction& fract2); friend bool operator >(const Fraction& fract1, const Fraction& fract2); friend ostream& operator << (ostream&, const Fraction&); friend istream& operator >> (istream&, Fraction&); int Numerator(void); // Accessors int Denominator(void); void setNumerator(int num); // Mutators (i.e. set values) void setDenominator(int denom); void print(void); // Output private: int numerator; // Data int denominator; }; ostream& operator << (ostream& out, const Fraction& aFract) { out <<"The value of the fraction is " << aFract.numerator << '/' << aFract.denominator << '\n'; return out; } istream& operator >> (istream& in, Fraction& aFract) { in >> aFract.numerator; in.ignore(1); in >> aFract.denominator; return in; } Fraction::Fraction() // Default constructor { numerator = 1; denominator = 1; } Fraction::Fraction(int num, int den) // Explicit-Value constructor { numerator = num; denominator = den; } int Fraction::Numerator(void) // Get the numberator value { return numerator; } int Fraction::Denominator(void) // Get the denominator value { return denominator; } void Fraction::setNumerator(int num) // Modify the numberator { numerator = num; } void Fraction::setDenominator(int denom) // Modify the denominator { denominator = denom; } void Fraction::print(void) // Display values { cout <<"The value of the fraction is " << numerator << '/' << denominator << '\n'; } Fraction operator *(const Fraction& fract1, const Fraction& fract2) { Fraction temp; temp.numerator = fract1.numerator * fract2.numerator; temp.denominator = fract1.denominator * fract2.denominator; return temp; } double operator -(const Fraction& fract1, const Fraction& fract2) { double temp; temp = fract1.numerator - fract2.numerator; return temp; } bool operator >(const Fraction& fract1, const Fraction& fract2) { if (fract1.numerator > fract2.numerator) return (1); else return (0); } int main() { Fraction a(2,2), b(3,3), c; // Declare three fraction objects cout << "Enter numerator,denominator: "; cin >> c; // exaple of overloaded input cout << "Object c - " << c << endl; c = a * b; // multiply objects a and b & display c.print(); b.print(); a.print(); cout << "\nc - b = " << c - b << endl; // demo of class I/O stream if (b > c) // demo use of bool cout << "True: b > c\n"; else cout << "b > c is False" << endl; cout << a; return 0; }