# Intializatio problem

Here i made a class rational to add, subtract, multiply and divide 2 rational numbers. But data members not able to take the values through constructor. I don’t know what’s the problem. I am sharing my code with you. Here my code is long if a very few lines of code can be made, so please tel me.

#include
#include<stdio.h>
#include<stdlib.h>

using namespace std;

class Rational
{
int num;
int den;

public:

Rational(int a = 0, int b = 0);
void sub();
void multiply();
void divide();
int getnum()
{
return num;
}
int getden()
{
return den;
}

};

Rational r1, r2, r3;

int main()
{
int ch, num, den, num1, den1;

while(1)
{
cout<<"\n1.ADD 2 RATIONAL NUMBERS";
cout<<"\n2.SUBTRACT 2 RATIONAL NUMBERS";
cout<<"\n3.MULTIPLY 2 RATIONAL NUMBERS";
cout<<"\n4.DIVIDE 2 RATIONAL NUMBERS";
cout<<"\n5.EXIT";
cout<<"\nENTER YOUR CHOICE : ";
cin>>ch;

switch(ch)
{
case 1:
{
cout<<"\nADDING 2 RATIONAL NUMBERS";
cout<<"\nENTER NUMERATOR AND DENOMINATOR OF 1ST NUMBER : ";
cin>>num>>den;
cout<<"\nENTER  NUMERATOR AND DENOMINATOR OF 2ND NUMBER : ";
cin>>num1>>den1;

Rational r1(num, den);
Rational r2(num1, den1);
}

break;

case 2:
{
cout<<"\nADIING 2 RATIONAL NUMBERS";
cout<<"\nENTER NUMERATOR AND DENOMINATOR OF 1ST NUMBER : ";
cin>>num>>den;
cout<<"\nENTER  NUMERATOR AND DENOMINATOR OF 2ND NUMBER : ";
cin>>num1>>den1;

Rational r1(num, den);
Rational r2(num1, den1);
r3.sub();
}

break;

case 3:
{

cout<<"\nADIING 2 RATIONAL NUMBERS";
cout<<"\nENTER NUMERATOR AND DENOMINATOR OF 1ST NUMBER : ";
cin>>num>>den;
cout<<"\nENTER  NUMERATOR AND DENOMINATOR OF 2ND NUMBER : ";
cin>>num1>>den1;

Rational r1(num, den);
Rational r2(num1, den1);
r3.multiply();
}

break;

case 4:
{
cout<<"\nADIING 2 RATIONAL NUMBERS";
cout<<"\nENTER NUMERATOR AND DENOMINATOR OF 1ST NUMBER : ";
cin>>num>>den;
cout<<"\nENTER  NUMERATOR AND DENOMINATOR OF 2ND NUMBER : ";
cin>>num1>>den1;

Rational r1(num, den);
Rational r2(num1, den1);
r3.divide();
}

break;

case 5:
exit(0);

default:
cout<<"\nWRONG CHOICE ENTERED!!!";

break;

}
}

}

Rational :: Rational(int a, int b)
: num(a),
den(b)
{

}

void Rational :: add()
{
int i, a, b, ch;
float c, d;

a = r1.getnum() * r2.getden() + r2.getnum() * r1.getden();
b = r1.getden() + r2.getden();

cout<<"\na = "<<a<<"\nb = "<<b;

if(b > a)
{
for(i = a; i > 1; i--)
{
if((a % i == 0) && (b % i == 0))
{
a /= i;
b /= i;
}
}
}
else if(a >= b)
{
for(i = b; i > 1; i--)
{
if((b % i == 0) && (a % i == 0))
{
a /= i;
b /= i;
}
}
}

cout<<"\n1.PRINT RATIONAL NUMBER IN FORM OF a/b";
cout<<"\n2.PRINT RATIONAL NUMBER IN FLOATING POINT FORMAT";
cout<<"\nENTER YOUR CHOICE : ";
cin>>ch;

if(ch == 1)
cout<<"\nRATIONAL NUMBER IN THE FORM OF : "<<a<<"/"<<b;
else if(ch == 2)
{
c = a;
d = b;
cout<<"\nRATIONAL NUMBER IN THE FORM OF : "<<c/d;
}

}

void Rational :: sub()
{
int i, a, b, ch;
float c, d;

a = r1.getnum() * r2.getden() - r2.getnum() * r1.getden();
b = r1.getden() * r2.getden();

if(b > a)
{
for(i = a; i > 1; i--)
{
if((a % i == 0) && (b % i == 0))
{
a /= i;
b /= i;
}
}
}
else if(a >= b)
{
for(i = b; i > 1; i--)
{
if((b % i == 0) && (a % i == 0))
{
a /= i;
b /= i;
}
}
}

cout<<"\n1.PRINT RATIONAL NUMBER IN FORM OF a/b";
cout<<"\n2.PRINT RATIONAL NUMBER IN FLOATING POINT FORMAT";
cout<<"\nENTER YOUR CHOICE : ";
cin>>ch;

if(ch == 1)
cout<<"\nRATIONAL NUMBER IN THE FORM OF : "<<a<<"/"<<b;
else if(ch == 2)
{
c = a;
d = b;
cout<<"\nRATIONAL NUMBER IN THE FORM OF : "<<c/d;
}

}

void Rational :: multiply()
{
int i, a, b, ch;
float c, d;

a = r1.getnum() * r2.getden();
b = r1.getden() * r2.getnum();

if(b > a)
{
for(i = a; i > 1; i--)
{
if((a % i == 0) && (b % i == 0))
{
a /= i;
b /= i;
}
}
}
else if(a >= b)
{
for(i = b; i > 1; i--)
{
if((b % i == 0) && (a % i == 0))
{
a /= i;
b /= i;
}
}
}

cout<<"\n1.PRINT RATIONAL NUMBER IN FORM OF a/b";
cout<<"\n2.PRINT RATIONAL NUMBER IN FLOATING POINT FORMAT";
cout<<"\nENTER YOUR CHOICE : ";
cin>>ch;

if(ch == 1)
cout<<"\nRATIONAL NUMBER IN THE FORM OF : "<<a<<"/"<<b;
else if(ch == 2)
{
c = a;
d = b;
cout<<"\nRATIONAL NUMBER IN THE FORM OF : "<<c/d;
}

}

void Rational :: divide()
{
int i, a, b, ch;
float c, d;

a = r1.getnum() * r2.getden() - r2.getnum() * r1.getden();
b = r1.getden() * r2.getden();

if(b > a)
{
for(i = a; i > 1; i--)
{
if((a % i == 0) && (b % i == 0))
{
a /= i;
b /= i;
}
}
}
else if(a >= b)
{
for(i = b; i > 1; i--)
{
if((b % i == 0) && (a % i == 0))
{
a /= i;
b /= i;
}
}
}

cout<<"\n1.PRINT RATIONAL NUMBER IN FORM OF a/b";
cout<<"\n2.PRINT RATIONAL NUMBER IN FLOATING POINT FORMAT";
cout<<"\nENTER YOUR CHOICE : ";
cin>>ch;

if(ch == 1)
cout<<"\nRATIONAL NUMBER IN THE FORM OF : "<<a<<"/"<<b;
else if(ch == 2)
{
c = a;
d = b;
cout<<"\nRATIONAL NUMBER IN THE FORM OF : "<<c/d;
}

}

Remember , a constructor is called during object creation , ie your values of ‘a’ and ‘b’ will be passed during object creation .