Reputation: 15
i want to this code class named Rational with the following methods:
a. Rational() // Default constructor returning rational number 1.
b. Rational(int n, int d) // Nominator is n, denominator is d.
c. int getNumerator() const
d. int getDenominator() const
e. Rational negate() const // Return -n/d
f. Rational reciprocal() const // Return d/n
g. bool operator==(const Rational& other) // Test equality of Rational numbers
h. Rational add(const Rational& rhs) const;
i. Rational subtract(const Rational& rhs) const;
j. Rational multiply(const Rational& rhs) const;
k. Rational divide(const Rational& rhs) const;
using namespace std;
class Rational
{
private:
int numerator;
int denominator;
public:
Rational()
{
numerator = denominator = 1;
}
Rational(int n, int d)
{
numerator = n;
denominator = d;
}
int getNumerator() const
{
return numerator;
}
int getDenominator() const
{
return denominator;
}
Rational negate() const
{
return -numerator/denominator;
}
Rational reciprocal() const
{
return denominator/numerator;
}
bool operator==(const Rational& other)
{
if(numerator == other.numerator && denominator == other.denominator)
{
return true;
}
else
return false;
}
Rational add(const Rational& a) const
{
Rational t; // creates Rational object
t.numerator = a.numerator * denominator;
t.numerator += a.denominator * numerator;
t.denominator = a.denominator * denominator;
return t;
}
Rational subtract(const Rational& b) const
{
Rational t; // creates Rational object
t.numerator = b.denominator * numerator;
t.numerator -= denominator * b.numerator;
t.denominator = b.denominator * denominator;
return t;
}
Rational multiply(const Rational& m) const
{
Rational t; // creates Rational object
t.numerator = m.numerator * numerator;
t.denominator = m.denominator * denominator;
return t;
}
Rational divide(const Rational& d) const
{
Rational t; // creates Rational object
t.numerator = d.denominator * numerator;
t.denominator = denominator * d.numerator;
return t;
}
void Rational::printRational ()
{
if ( denominator == 0 ) // validates denominator
cout << "\nDIVIDE BY ZERO ERROR!!!" << '\n';
else if ( numerator == 0 ) // validates numerator
cout << 0;
else
cout << numerator << '/' << denominator;
}
void Rational::printRationalAsDouble()
{
cout << static_cast< double >( numerator ) / denominator;
}
};
int main() {
Rational c( 2, 6 ), d( 7, 8 ), x;
c.printRational();
cout << " + ";
d.printRational();
x = c.add( d );
cout << " = ";
x.printRational();
cout << '\n';
x.printRational();
cout << " = ";
x.printRationalAsDouble();
cout << "\n\n";
c.printRational();
cout << " - ";
d.printRational();
x = c.subtract( d );
cout << " = ";
x.printRational();
cout << '\n';
x.printRational();
cout << " = ";
x.printRationalAsDouble();
cout << "\n\n";
c.printRational();
cout << " x ";
d.printRational();
x = c.multiply( d );
cout << " = ";
x.printRational();
cout << '\n';
x.printRational();
cout << " = ";
x.printRationalAsDouble();
cout << "\n\n";
c.printRational();
cout << " / ";
d.printRational();
x = c.divide( d );
cout << " = ";
x.printRational();
cout << '\n';
x.printRational();
cout << " = ";
x.printRationalAsDouble();
cout << endl;
return 0;
}
but i take these error
main.cpp:87:10: error: extra qualification ‘Rational::’ on member ‘printRational’ [-fpermissive] void Rational::printRational () ^~~~~~~~
main.cpp:97:10: error: extra qualification ‘Rational::’ on member ‘printRationalAsDouble’ [-fpermissive] void Rational::printRationalAsDouble() ^~~~~~~~
main.cpp: In member function ‘Rational Rational::negate() const’: main.cpp:35:26: error: could not convert ‘((-(int)((const Rational*)this)->Rational::numerator) / ((int)((const Rational*)this)->Rational::denominator))’ from ‘int’ to ‘Rational’ return -numerator/denominator; ~~~~~~~~~~^~~~~~~~~~~~
main.cpp: In member function ‘Rational Rational::reciprocal() const’: main.cpp:40:27: error: could not convert ‘(((int)((const Rational*)this)->Rational::denominator) / ((int)((const Rational*)this)->Rational::numerator))’ from ‘int’ to ‘Rational’ return denominator/numerator; ~~~~~~~~~~~^~~~~~~~~~
Upvotes: 0
Views: 225
Reputation: 10021
Change void Rational::printRational
to void printRational
Same this for printRationalAsDouble
. When defining functions directly in the class, you don't specify the class name followed by ::
Also, in negate
you have return -numerator/denominator;
but this isn't valid, because it can't convert it to your return type of Rational
. You probably want return Rational(-numerator, denominator);
, and a similar for your reciprocal
function. If you are trying to return the result of the operation, as opposed to a new object, then you can just change your return type.
Upvotes: 3