You are on page 1of 5

Fraction Class Link:

https://codereview.stackexchange.com/questions/157881/implementation-of-a-rational-
number-class-in-c

#include <iostream>

using namespace std;

class Fraction{
int numer;
int denom;

void create(int m=1,int n=1){


numer = m;
denom = n;
if(n < 0){
numer = 0 - m;
denom = 0 - n;
}
else if(n > 0){
if(m == 0){
numer = 0;
denom = 1;
}
else{
numer = m;
denom = n;
}
}
else{
exit(1);
}
}

void precision(int precision){


double d = numer/denom;
numer = d * precision;
denom = precision;
}
}

int main()
{
cout<<"Hello World";

return 0;
}

2nd Time Latest

#include <iostream>

using namespace std;

class Fraction{
private:
int numer;
unsigned int denom;

public:
//default constructor
Fraction(){
numer = 1;
denom = 1;
}
//one parameter
Fraction(int m){
numer = m;
denom = 1;
}
//two parameters
Fraction(int m,int n){
numer = m;
denom = n;
if(n < 0){
numer = 0 - m;
denom = 0 - n;
}
if(m == 0){
numer = 0;
denom = 1;
}
if(n == 0){
exit(1);
}
}
//Precision
Precision(int precision,Fraction fra){
double d = fra.numer/fra.denom;
fra.numer = d * precision;
fra.denom = precision;
}
//Copy Constructor
Fraction(Fraction other){
numer = other.numer;
denom = other.denom;
}
//Destructor
~Fraction();
//Copy Assignment Operator
Fraction operator =(const Fraction& fr){
numer = fr.numer;
denom = fr.denom;

return Fraction(numer/gcd(numer,denom),denom/gcd(numer,denom));
}
//Unary Arithmetic Operators
//--Unary minus operator
Fraction operator -(){
numer = 0 - numer;
denom = denom - 0;

return Fraction(numer/gcd(numer,denom),denom/gcd(numer,denom));
}
//--Unary plus operator
Fraction operator +(){
numer = 0 + numer;
denom = 0 + denom;

return Fraction(numer/gcd(numer,denom),denom/gcd(numer,denom));
}
//Prefix pre-decrement operator for dividendo
Fraction& operator--(){
numer = numer - denom;
denom = denom;

return Fraction(numer/gcd(numer,denom),denom/gcd(numer,denom));
}
//Prefix pre-increment operator for componendo
Fraction& operator++(){
numer = numer + denom;
denom = denom;

return Fraction(numer/gcd(numer,denom),denom/gcd(numer,denom));
}
//Postfix post-decrement operator for lazy dividendo
Fraction operator--(int){
int m1,n1;
m1 = numer - denom;
n1 = denom;

return Fraction(m1/gcd(m1,n1),n1/gcd(m1,n1));
}
//Postfix post-increment operator for lazy componendo
Fraction operator++(int){
int m2,n2;
m2 = numer + denom;
n2 = denom;

return Fraction(m2/gcd(m2,n2),n2/gcd(m2,n2));
}
//Binary Arithmetic Operators
//Addition
Fraction operator +(Fraction Frac1,Fraction Frac2) {
int newnumer = Frac1.numer*Frac2.denom + Frac2.denom*Frac1.numer;
int newdenom = Frac1.denom*Frac2.denom;

return
Fraction(newnumer/gcd(newnumer,newdenom),newdenom/gcd(newnumer,newdenom));
}
//Subtraction
Fraction operator -(Fraction Frac1,Fraction Frac2) {
int newnumer = Frac1.numer*Frac2.denom - Frac2.denom*Frac1.numer;
int newdenom = Frac1.denom*Frac2.denom;

return
Fraction(newnumer/gcd(newnumer,newdenom),newdenom/gcd(newnumer,newdenom));
}
//Multiplication
Fraction operator *(Fraction Frac1,Fraction Frac2) {
int newnumer = Frac1.numer*Frac2.numer;
int newdenom = Frac1.denom*Frac2.denom;
return
Fraction(newnumer/gcd(newnumer,newdenom),newdenom/gcd(newnumer,newdenom));
}
//Division
Fraction operator /(Fraction Frac1,Fraction Frac2) {
int newnumer = Frac1.numer*Frac2.denom;
int newdenom = Frac1.denom*Frac2.numer;

return
Fraction(newnumer/gcd(newnumer,newdenom),newdenom/gcd(newnumer,newdenom));
}
//Remainder
Fraction operator %(Fraction Frac1,Fraction Frac2) {
int newnumer = Frac1.numer*Frac2.numer;
int newdenom = 1;

return
Fraction(newnumer/gcd(newnumer,newdenom),newdenom/gcd(newnumer,newdenom));
}
//Binary Relational Operators
//Equal
bool operator ==(Fraction Frac1,Fraction Frac2){
if(Frac1.numer == Frac2.numer && Frac1.denom == Frac2.denom){
return true;
}
else{
return false;
}
}
//Not equal
bool operator !=(Fraction Frac1,Fraction Frac2){
if(Frac1.numer != Frac2.numer || Frac1.denom != Frac2.denom){
return true;
}
else{
return false;
}
}
//First operand is Less than Second operand
bool operator <(Fraction Frac1,Fraction Frac2){
if((Frac1.numer*Frac2.denom) < (Frac2.numer*Frac1.denom)){
return true;
}
else{
return false;
}
}
//First operand is Less than or Equal to Second operand
bool operator <=(Fraction Frac1,Fraction Frac2){
if((Frac1.numer*Frac2.denom) <= (Frac2.numer*Frac1.denom)){
return true;
}
else{
return false;
}
}
//First operand is More than Second operand
bool operator >(Fraction Frac1,Fraction Frac2){
if((Frac1.numer*Frac2.denom) > (Frac2.numer*Frac1.denom)){
return true;
}
else{
return false;
}
}
//First operand is More than or Equal to Second operand
bool operator >=(Fraction Frac1,Fraction Frac2){
if((Frac1.numer*Frac2.denom) >= (Frac2.numer*Frac1.denom)){
return true;
}
else{
return false;
}
}
//Special Operators
Fraction operator !(Fraction Frac){
return
Fraction(Frac.denom/gcd(Frac.numer,Frac.denom),Frac.numer/gcd(Frac.numer,Frac.denom
));
}
//I/O Operators
//GCD
int gcd(int n, int d)
{
int remainder;
while (d != 0)
{
remainder = n % d;
n = d;
d = remainder;
}
return n;
}
}

int main()
{
cout<<"Hello World";

return 0;
}

You might also like