We are instructed to write the Frac.h and Frac.cpp files given a driver program. The purpose is to build a class for Fraction ADT to perform arithmetic with fractions. I have written the following files but am receiving some compiler errors.
C2512 'Fraction': no appropriate default constructor available
C2665 'Fraction::Fraction': no overloaded function could convert all the argument types
Driver file (Professor wrote this):
// driver for cmpsc122 Lab 4
#include "Frac.h"
#include <iostream>
using namespace std;
int main() {
Fraction x(-3, 8), y(-15, -20), z, w(5);
x.printFraction(); cout << " + "; y.printFraction();
z = x.add(y);
cout << " = "; z.printFraction(); cout << endl;
z.printFraction();
cout << " = "; z.printFractionAsFloat(); cout << endl << endl;
x.printFraction(); cout << " - "; y.printFraction();
z = x.subtract(y);
cout << " = "; z.printFraction(); cout << endl;
z.printFraction();
cout << " = "; z.printFractionAsFloat(); cout << endl << endl;
x.printFraction(); cout << " * "; y.printFraction();
z = x.multiply(y);
cout << " = "; z.printFraction(); cout << endl;
z.printFraction();
cout << " = "; z.printFractionAsFloat(); cout << endl << endl;
x.printFraction(); cout << " / "; y.printFraction();
z = x.divide(y);
cout << " = "; z.printFraction(); cout << endl;
z.printFraction();
cout << " = "; z.printFractionAsFloat(); cout << endl;
#ifdef _WIN32 // _WIN32 is used by Visual C++
#if (_MSC_VER <= 1916) // check if it Visual Studio 2017 or earlier
system("pause");
#endif
#endif
return 0;
}
/Sample run:
-3/8 + 3/4 = 3/8
3/8 = 0.375
-3/8 - 3/4 = -9/8
-9/8 = -1.125
-3/8 3/4 = -9/32
-9/32 = -0.28125
-3/8 / 3/4 = -1/2
-1/2 = -0.5
Press any key to continue . . .
*/
Frac.cpp (I wrote this)
#include "Frac.h"
#include <iostream>
#include <iomanip>
using namespace std;
Fraction Fraction::add(Fraction myFrac)
{
int newNum;
int newDom;
newNum = myFrac.num + num;
newDom = myFrac.dom + dom;
Fraction i(newNum, newDom);
return i;
}
Fraction Fraction::subtract(Fraction myFrac)
{
int newNum;
int newDom;
newNum = num - myFrac.num;
newDom = dom - myFrac.dom;
Fraction i(newNum, newDom);
return i;
}
Fraction Fraction::multiply(Fraction myFrac)
{
int newNum;
int newDom;
newNum = num * myFrac.num;
newDom = dom * myFrac.dom;
Fraction i(newNum, newDom);
return i;
}
Fraction Fraction::divide(Fraction myFrac)
{
int newNum;
int newDom;
newNum = num / myFrac.num;
newDom = dom / myFrac.dom;
Fraction i(newNum, newDom);
return i;
}
void Fraction :: printFraction()
{
cout << num << "/" << dom;
}
void Fraction::printFractionAsFloat()
{
float i = float(num) / float(dom);
cout << fixed << setprecision(3);
cout << i;
}`
Frac.h (and this)
#ifndef FRAC_H
#define FRAC_H
class Fraction
{
public:
Fraction(int myNum, int myDom);
Fraction add(Fraction myFrac);
Fraction subtract(Fraction myFrac);
Fraction multiply(Fraction myFrac);
Fraction divide(Fraction myFrac);
void printFraction();
void printFractionAsFloat();
private:
int num;
int dom;
};
#endif
I have tried creating a default constructor but all my attempts have just created more errors.