#include <iostream.h> #include <math.h> class RationalNumbers { public: RationalNumbers(double, double); RationalNumbers operator+(const RationalNumbers &) const; RationalNumbers operator-(const RationalNumbers &) const; RationalNumbers operator*(const RationalNumbers &) const; RationalNumbers operator/(const RationalNumbers &) const; friend ostream &operator<<(ostream&, const RationalNumbers &); friend istream &operator>>(istream&, RationalNumbers & ); private: double numerator; double denominator; }; // Constructor RationalNumbers::RationalNumbers( double num, double den ) { num=numerator; if (den>0) {den=denominator;} } //void RationalNumbers::reduce() //{} // addition RationalNumbers RationalNumbers::operator+( const RationalNumbers &part2 ) const { return RationalNumbers( numerator*part2.denominator+part2.numerator*denominator, denominator*part2.denominator ); } // subtraction RationalNumbers RationalNumbers::operator-( const RationalNumbers &part2 ) const { return RationalNumbers( numerator*part2.denominator-part2.numerator*denominator, denominator*part2.denominator ); } //multiplication RationalNumbers RationalNumbers::operator *( const RationalNumbers &part2 ) const { return RationalNumbers(numerator*part2.numerator, denominator*part2.denominator); } //Division RationalNumbers RationalNumbers::operator /(const RationalNumbers &part2) const { return RationalNumbers(numerator*part2.denominator, denominator*part2.numerator); } istream &operator>>(istream &in, RationalNumbers &part2) { in>>part2.numerator; in.ignore(); in>>part2.denominator ; return in; } // show form: (a, b) ostream &operator <<(ostream &out, const RationalNumbers &part2) {out<<part2.numerator<<"/"<<part2.denominator <<endl; return out; } int main() { RationalNumbers x; RationalNumbers a; RationalNumbers b; cout<<"Enter 2 integers for a:\n"; cin>>a; cout<<"\nEnter 2 integers for b:\n"; cin>>b; cout<<"x = a + b: "; x=a+b; cout<<x; cout<<"x = a - b: "; x=a-b; cout<<x; cout<<"x = a*b: "; x=a*b; cout<<x; cout<<"x=a/b: "; x=a/b; cout<<x; return 0; }
// Constructor RationalNumbers::RationalNumbers( double num, double den ) { num=numerator; if (den>0) {den=denominator;} }
RationalNumbers x; RationalNumbers a; RationalNumbers b;
// Constructor RationalNumbers::RationalNumbers( ) : numerator(0.0), denominator(1.0) {}
// Constructor RationalNumbers::RationalNumbers( double num = 0.0, double den = 1.0 ) : numerator(num), denominator(den) {}
RationalNumbers x(0.0,1.0); RationalNumbers a(0.0,1.0); RationalNumbers b(0.0,1.0);
#include <iostream.h> #include <math.h> class RationalNumbers { public: RationalNumbers(double=0.0, double=1.0); RationalNumbers operator+(const RationalNumbers &) const; RationalNumbers operator-(const RationalNumbers &) const; RationalNumbers operator*(const RationalNumbers &) const; RationalNumbers operator/(const RationalNumbers &) const; bool operator<(const RationalNumbers &) const; bool operator>(const RationalNumbers &) const; bool operator<=(const RationalNumbers &) const; bool operator>=(const RationalNumbers &) const; bool operator==(const RationalNumbers &) const; bool operator!=(const RationalNumbers &) const; friend ostream &operator<<(ostream&, const RationalNumbers &); friend istream &operator>>(istream&, RationalNumbers & ); private: double numerator; double denominator; }; // Constructor RationalNumbers::RationalNumbers( double num, double den ) : numerator( num ), denominator(den) { num=numerator; if (denominator>0) den=denominator; else cout<<"Error Try again"<<endl; int i; for(i=2; i<=numerator; ++i) { if( ((numerator/i) == ((int)(numerator/i))) && ((denominator/i) == ((int)(denominator/i))) ) { numerator /= i; denominator /= i; --i; } } } // addition RationalNumbers RationalNumbers::operator+( const RationalNumbers &part2 ) const { return RationalNumbers( numerator*part2.denominator+part2.numerator*denominator, denominator*part2.denominator ); } // subtraction RationalNumbers RationalNumbers::operator-( const RationalNumbers &part2 ) const { return RationalNumbers( numerator*part2.denominator-part2.numerator*denominator, denominator*part2.denominator ); } //multiplication RationalNumbers RationalNumbers::operator *( const RationalNumbers &part2 ) const { return RationalNumbers(numerator*part2.numerator, denominator*part2.denominator); } //Division RationalNumbers RationalNumbers::operator /(const RationalNumbers &part2) const { return RationalNumbers(numerator*part2.denominator, denominator*part2.numerator); } //a is less than b bool RationalNumbers::operator <(const RationalNumbers &part2) const {double temp, temp2; temp=numerator*part2.denominator; temp2=part2.numerator*denominator; if (temp < temp2) return true; else return false; } //a is greater than b bool RationalNumbers::operator >(const RationalNumbers &part2) const {double temp, temp2; temp=numerator*part2.denominator; temp2=part2.numerator*denominator; if(temp > temp2) return true; else return false; } //a is less or equal to b bool RationalNumbers::operator <=(const RationalNumbers &part2) const {double temp, temp2; temp=numerator*part2.denominator; temp2=part2.numerator*denominator; if(temp <= temp2) return true; else return false; } bool RationalNumbers::operator >=(const RationalNumbers &part2) const {double temp, temp2; temp=numerator*part2.denominator; temp2=part2.numerator*denominator; if(temp >= temp2) return true; else return false; } // a is equal to b bool RationalNumbers::operator ==(const RationalNumbers &part2) const { if(numerator == part2.numerator && denominator==part2.denominator) return true; else return false; } //a not equal to b bool RationalNumbers::operator !=(const RationalNumbers &part2) const { if(numerator == part2.numerator && denominator==part2.denominator) return false; else return true; } istream &operator>>(istream &in, RationalNumbers &part2) { in>>part2.numerator; in.ignore(); in>>part2.denominator ; return in; } // show form: (a, b) ostream &operator <<(ostream &out, const RationalNumbers &part2) {out<<part2.numerator<<"/"<<part2.denominator <<endl; return out; } int main() { RationalNumbers x; RationalNumbers a; RationalNumbers b; cout<<"Enter a fraction for a:\n"; cin>>a; cout<<"\nEnter a fraction for b:\n"; cin>>b; cout<<"x = a + b: "; x=a+b; cout<<x; cout<<"x = a - b: "; x=a-b; cout<<x; cout<<"x = a*b: "; x=a*b; cout<<x; cout<<"x=a/b: "; x=a/b; cout<<x; a<b; if (a<b) cout<<"a<b"<<endl; a>b; if(a>b) cout<<"a>b"<<endl; a<=b; if(a<=b) cout<<"a<=b"<<endl; a>=b; if(a>=b) cout<<"a>=b"<<endl; a==b; if(a==b) cout<<"a equals b"<<endl; a!=b; if (a!=b) cout<<"a not equal to b"<<endl<<endl; return 0; }
int main() { RationalNumbers x; RationalNumbers a; RationalNumbers b; while(1){ // loop I don't know how to stop it cout<<"Enter a fraction for a:\n"; cin>>a; cout<<"\nEnter a fraction for b:\n"; cin>>b; if(?) exit(0); // I don't know what to put between the parentesis cout<<"x = a + b: "; x=a+b; cout<<x; blah, blah, blah... ........ a==b; if(a==b) cout<<"a equals b"<<endl; a!=b; if (a!=b) cout<<"a not equal to b"<<endl<<endl; } return 0; }
int main() { char c; do { /* ... */ cout << "Continue? (y/n) "; cin >> c; } while ( c == 'y' ); return 0; }
[Info 1739] Binary operator 'RationalNumbers::operator+(const RationalNumbers &) const' should be non-member function [Info 1754] Expected symbol 'operator+=' to be declared for class 'RationalNumbers' [Info 1739] Binary operator 'RationalNumbers::operator-(const RationalNumbers &) const' should be non-member function [Info 1754] Expected symbol 'operator-=' to be declared for class 'RationalNumbers' [Info 1739] Binary operator 'RationalNumbers::operator*(const RationalNumbers &) const' should be non-member function [Info 1754] Expected symbol 'operator*=' to be declared for class 'RationalNumbers' [Info 1739] Binary operator 'RationalNumbers::operator/(const RationalNumbers &) const' should be non-member function [Info 1754] Expected symbol 'operator/=' to be declared for class 'RationalNumbers' [Info 1739] Binary operator 'RationalNumbers::operator<(const RationalNumbers &) const' should be non-member function [Info 1739] Binary operator 'RationalNumbers::operator>(const RationalNumbers &) const' should be non-member function [Info 1739] Binary operator 'RationalNumbers::operator<=(const RationalNumbers &) const' should be non-member function [Info 1739] Binary operator 'RationalNumbers::operator>=(const RationalNumbers &) const' should be non-member function [Info 1739] Binary operator 'RationalNumbers::operator==(const RationalNumbers &) const' should be non-member function [Info 1739] Binary operator 'RationalNumbers::operator!=(const RationalNumbers &) const' should be non-member function
1739 Binary operator 'Symbol' should be non-member function -- The indicated function was declared as a member function. There were a number of indicators to suggest that it should have been a non-member function. The class, X of which it was a member has a constructor that could be used to convert numeric values to X. The parameter to the operator was X or its equivalent. For this reason the operator would behave unsymmetrically. A numeric value on the right hand side would be promoted but not a value on the left hand side. For example, X op 27 would work but 27 op X would not. [12, Item 19].
1754 Expected symbol 'Symbol' to be declared for class 'Symbol' -- The first Symbol is of the form: operator op= where op is a binary operator. A binary operator op was declared for type X where X is identified by the second Symbol. For example, the appearance of:
X operator+( const X &, const X & );
somewhere in the program would suggest that a += version appear as a member function of class X. This is not only to fulfill reasonable expectations on the part of the programmer but also because operator+= is likely to be more efficient than operator+ and because operator+ can be written in terms of operator+=. [23, Item 22]
The message is also given for member binary operators. In all cases the message is not given unless the return value matches the first argument (this is the implicit argument in the case of a member function).
#include <iostream> using std::cin; using std::cout; using std::endl; using std::istream; using std::ostream; class rational { double num; double den; public: // Constructor rational::rational( double n = 0.0, double d = 1.0 ) : num( n ), den( d ) { if ( den > 0 ) { d = den; } else { cout << "Error Try again" << endl; } for ( int i = 2; i <= num; ++i ) { if ( ((num/i) == ((int)(num/i))) && ((den/i) == ((int)(den/i))) ) { num /= i; den /= i; --i; } } } // addition rational rational::operator+ ( const rational &rhs ) { return rational( num * rhs.den + rhs.num * den, den * rhs.den ); } // subtraction rational rational::operator- ( const rational &rhs ) const { return rational( num * rhs.den - rhs.num * den, den * rhs.den ); } // multiplication rational rational::operator* ( const rational &rhs ) const { return rational(num * rhs.num, den * rhs.den); } // division rational rational::operator/ ( const rational &rhs ) const { return rational(num * rhs.den, den * rhs.num); } // less than bool rational::operator< ( const rational &rhs ) const { return( num * rhs.den < rhs.num * den ); } // greater than bool rational::operator> ( const rational &rhs ) const { return( num * rhs.den > rhs.num * den ); } // less or equal to bool rational::operator<= ( const rational &rhs ) const { return( num * rhs.den <= rhs.num * den ); } // greater than or equal to bool rational::operator>= ( const rational &rhs ) const { return( num * rhs.den >= rhs.num * den ); } // equality bool rational::operator== ( const rational &rhs ) const { return num == rhs.num && den==rhs.den; } // inequality bool rational::operator!= ( const rational &rhs ) const { return !( num == rhs.num && den==rhs.den ); } // extraction friend ostream &operator<< ( ostream&, const rational& ); // insertion friend istream &operator>> ( istream&, rational& ); }; istream &operator>> ( istream &in, rational &rhs ) { return in >> rhs.num >> rhs.den; } // show form: (a, b) ostream &operator<< ( ostream &out, const rational &rhs ) { return out << rhs.num << "/" << rhs.den; } int main() { rational x, a, b; char c; do { cout << "Enter a fraction for a: "; cin >> a; cout << "Enter a fraction for b: "; cin >> b; x = a + b; cout << "x = a + b: " << x << endl; x = a - b; cout << "x = a - b: " << x << endl; x = a * b; cout << "x = a * b: " << x << endl; x = a / b; cout << "x = a / b: " << x << endl; cout << "Continue? (y/n) "; cin >> c; } while ( c == 'y' ); return 0; } /* my output Enter a fraction for a: 1 2 Enter a fraction for b: 1 3 x = a + b: 5/6 x = a - b: 1/6 x = a * b: 1/6 x = a / b: 3/2 Continue? (y/n) y Enter a fraction for a: 1 4 Enter a fraction for b: 1 5 x = a + b: 9/20 x = a - b: 1/20 x = a * b: 1/20 x = a / b: 5/4 Continue? (y/n) n */
| DaniWeb Message | |
| Cancel Changes | |