I was previously running into an issue that said main.exe doesn't exist when I try including header files. I changed the tasks.json file and included "${fileDirname}\\Rational.cpp". And I was able to use the other methods such as adding and subtracting. But then I tried using the overloaded operator<< and operator>> methods. And I was getting undefined method error in the terminal and vscode doesn't detect it during compilation (No red squiggles). When I run the code the following screen pops up:
And this is my task.json:
Here is my code:
Rational.h
#ifndef RATIONAL_H
#define RATIONAL_H
#include <iostream>
using namespace std;
class Rational {
public:
Rational();
Rational(int, int);
//Rational(int = 0, int = 1);
Rational(const Rational &orig);
int getNumerator();
int getDenominator();
void setNumerator(int);
void setDenominator(int);
void setRational(int, int);
Rational operator+(Rational);
Rational operator-(Rational);
Rational operator*(Rational);
Rational operator/(Rational);
friend ostream& operator<<(ostream&, Rational&);
friend istream& operator>>(istream&, Rational&);
private:
int numerator;
int denominator;
void reduce();
};
#endif
Rational.cpp
#include "Rational.h"
using namespace std;
Rational::Rational() {
setRational(0, 1);
}
Rational::Rational(int numerator, int denominator) {
setRational(numerator, denominator);
}
Rational::Rational(const Rational& orig) {
setRational(orig.numerator, orig.denominator);
}
int Rational::getNumerator() {
return numerator;
}
int Rational::getDenominator() {
return denominator;
}
void Rational::setNumerator(int numerator) {
this->numerator = numerator;
}
void Rational::setDenominator(int denominator) {
if (denominator == 0) {
this->denominator = 1;
}
else {
this->denominator = denominator;
}
}
void Rational::setRational(int numerator, int denominator) {
setNumerator(numerator);
setDenominator(denominator);
reduce();
}
void Rational::reduce() {
int min = (numerator < denominator) ? numerator : denominator;
for (int i = 2; i <= min; ) {
if (numerator % i == 0 && denominator % i == 0) {
numerator /= i;
denominator /= i;
}
else {
i++;
}
}
}
Rational Rational::operator+(Rational r) {
Rational result = Rational(this->numerator * r.denominator + r.numerator * this->denominator,
this->denominator * r.denominator);
return result;
}
Rational Rational::operator-(Rational r) {
Rational result = Rational(this->numerator * r.denominator - r.numerator * this->denominator,
this->denominator * r.denominator);
return result;
}
Rational Rational::operator*(Rational r) {
Rational result = Rational(this->numerator * r.numerator, this->denominator * r.denominator);
return result;
}
Rational Rational::operator/(Rational r) {
Rational result = Rational(this->numerator / r.numerator, this->denominator / r.denominator);
return result;
}
ostream& operator<<(ostream &out, Rational r) {
out << r.getNumerator() << "/" << r.getDenominator() << endl;
return out;
}
istream& operator>>(istream &in, Rational r) {
int numerator;
cout << "Enter the numerator: ";
in >> numerator;
int denominator;
cout << "Enter the denominator: ";
in >> denominator;
r.setNumerator(numerator);
r.setDenominator(denominator);
return in;
}
main.cpp
#include <iostream>
#include "Rational.h"
using namespace std;
int main() {
Rational r1(2, 4);
Rational r2(2, 5);
Rational r3;
cin >> r3;
Rational r4(r1);
cout << "R1: " << r1 << endl;
cout << "R2: " << r2 << endl;
cout << "R3: " << r3 << endl;
cout << "R4: " << r4 << endl;
r4 = r1 + r2;
cout << "r1 + r2 = " << r4 << endl;
r4 = r1 - r2;
cout << "r1 - r2 = " << r4 << endl;
return 0;
}