Skip to content

Instantly share code, notes, and snippets.

@sidd607
Last active May 19, 2016 07:26
Show Gist options
  • Select an option

  • Save sidd607/0a0d3173c150a4daeaf5 to your computer and use it in GitHub Desktop.

Select an option

Save sidd607/0a0d3173c150a4daeaf5 to your computer and use it in GitHub Desktop.
#include <iostream>
#include <string>
using namespace std;
class Number;
class Integer;
class Rational;
class Number
{
public:
int num, den;
virtual Number* add(Number&) = 0;
virtual Number* addInteger(Integer&) =0 ;
virtual Number* addRational(Rational&) =0 ;
virtual string toString() = 0;
};
class Rational : public Number
{
Rational* addInteger(Integer& i);
Rational* addRational(Rational &r);
public:
string toString(){
std::string s = to_string(this->num) + "/" + to_string(this->den);
return s;
}
Number* add(Number& n)
{
Number *t = n.addRational(*this);
return t;
}
Rational(int n, int d)
{
this->num = n;
this->den = d;
}
};
class Integer : public Number
{
Integer* addInteger(Integer& i);
Rational* addRational(Rational& r);
public:
string toString(){
std::string s = to_string(this->num) ;
return s;
}
Number* add(Number& n)
{
Number* t = n.addInteger(*this);
return t;
}
Integer(int n)
{
this->num = n;
this->den = 1;
}
};
Rational* Rational::addInteger(Integer& i)
{
int num = this->num + i.num*this->den;
int den = this->den;
Rational *r = new Rational(num, den);
return r;
}
Rational* Rational::addRational(Rational &r)
{
int num = this->num*r.den + this->den*r.num;
int den = this->den*r.den;
Rational *rf = new Rational(num, den);
return rf;
}
Integer* Integer::addInteger(Integer& i)
{
int num = this-> num + i.num;
int den = 1;
Integer *is = new Integer(num);
return is;
}
Rational* Integer::addRational(Rational& r)
{
int num = this->num*r.den + r.num;
int den = r.den;
Rational *rf = new Rational(num, den);
return rf;
}
int main()
{
Integer i1 = Integer(2);
Integer i2 = Integer(3);
Rational r1 = Rational(2 , 3); // numerator = 2 , denominator = 3.
Rational r2 = Rational(4 , 5);
Number *n1 = i1. add(i2);
Number *n2 = i1. add(r1);
Number *n3 = r1. add(r2);
Number *n4 = r1. add(i1);
cout << " n1 = " << n1 -> toString() << endl ;
cout << " n2 = " << n2 -> toString() << endl ;
cout << " n3 = " << n3 -> toString() << endl ;
cout << " n4 = " << n4 -> toString() << endl ;
return 0;
}
@sidd607
Copy link
Author

sidd607 commented Feb 5, 2016

compile g++ -std=c++11

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment