Quelqu'un peut-il expliquer cette erreur pourquoi je l'obtiens? Je crois que j'ai tout l'arithmétique dans ma classe séparée.
Ce programme stocke et manipule des fractions, tout en testant la surcharge.
Merci d'avance.
J'essaie de tester cela dans le pilote avec la sortie ressemblant à ceci.
f1 = 3/6, f2 = 4/5
f1 + f2 = 39/30 = 13/10 = 1.3
f1 - f2 = -9/30 = -3/10 = -0.3
f1 * f2 = 12/30 = 2/5 = 0.4
f1 / f2 = 15/24 = 5/8 = 0.625
Enter a fraction [numerator denominator]: 2 5
You entered 2/5
Ma classe Fraction.cpp
#include "Fraction.h"
#include <iostream>
using namespace std;
Fraction::Fraction(const int numerator, const int denominator) { }
int Fraction::getNumerator() const {
return numerator;
}
int Fraction::getDenominator() const {
return denominator;
}
int Fraction::gcd() const {
int n = numerator;
int d = denominator;
int temp;
while (d!=0) {
temp = n % d;
n = d;
d = temp;
}
return n;
}
void Fraction::setNumerator(const int numerator) {
this->numerator = numerator;
}
void Fraction::setDenominator(const int denominator) {
this->denominator = denominator;
}
string Fraction::toString() const {
return "";
}
double Fraction::returnDecimal() const {
double a = (double) getNumerator();
double b = (double) getDenominator();
return (a / b);
}
void Fraction::reduce() {
int a = gcd();
int b = numerator / a;
int c = denominator / a;
setNumerator(b);
setDenominator(c);
}
Fraction Fraction::operator +(const Fraction& f) const {
Fraction temp;
int a = getNumerator();
int b = getDenominator();
int c = f.getNumerator();
int d = f.getDenominator();
int tempOne = b;
int tempTwo = d;
a = a * tempTwo;
b = b * tempTwo;
c = c * tempOne;
d = d * tempOne;
temp.setNumerator(a+c);
temp.setDenominator(d);
return temp;
}
Fraction Fraction::operator -(const Fraction& f) const {
Fraction temp;
int a = getNumerator();
int b = getDenominator();
int c = f.getNumerator();
int d = f.getDenominator();
int tempOne = b;
int tempTwo = d;
a = a * tempTwo;
b = b * tempTwo;
c = c * tempOne;
d = d * tempOne;
temp.setNumerator(a-c);
temp.setDenominator(d);
return temp;
}
Fraction Fraction::operator *(const Fraction& f) const {
Fraction temp;
temp.setNumerator(getNumerator() * f.getNumerator());
temp.setDenominator(getDenominator() * f.getDenominator());
return temp;
}
Fraction Fraction::operator /(const Fraction& f) const {
Fraction temp;
temp.setNumerator(getNumerator() * f.getDenominator());
temp.setDenominator(getDenominator() * f.getNumerator());
return temp;
}
bool Fraction::operator ==(const Fraction& f) const {
return ( (getNumerator() == f.getNumerator()) && (getDenominator() == f.getDenominator()) );
}
bool Fraction::operator !=(const Fraction& f) const {
return !( (getNumerator() == f.getNumerator()) && (getDenominator() == f.getDenominator()) );
}
bool Fraction::operator <(const Fraction& f) const {
double a = getNumerator();
double b = getDenominator();
double c = getNumerator();
double d = getDenominator();
return ((a/b) < (c/d));
}
bool Fraction::operator <=(const Fraction& f) const {
double a = getNumerator();
double b = getDenominator();
double c = getNumerator();
double d = getDenominator();
return ((a/b) <= (c/d));
}
bool Fraction::operator >(const Fraction& f) const {
double a = getNumerator();
double b = getDenominator();
double c = getNumerator();
double d = getDenominator();
return ((a/b) > (c/d));
}
bool Fraction::operator >=(const Fraction& f) const {
double a = getNumerator();
double b = getDenominator();
double c = getNumerator();
double d = getDenominator();
return ((a/b) >= (c/d));
}
ostream& operator <<(ostream& out, const Fraction& f) {
out << f.getNumerator() << "/" << f.getDenominator();
return out;
}
istream& operator >>(istream& in, Fraction& f) {
int a;
int b;
in >> a >> b;
f.setNumerator(a);
f.setDenominator(b);
return in;
}
Ma classe principale.
#include <iostream>
#include "Fraction.h"
#include "Fraction.cpp"
using namespace std;
int main(int argc, const char * argv[])
{
Fraction::getNumerator() const;
Fraction::getDenominator() const;
Fraction::gcd() const;
Fraction::setNumerator(<#const int numerator#>);
Fraction::setDenominator(<#const int denominator#>);
Fraction::toString();
Fraction::returnDecimal() const;
Fraction::reduce();
return 0;
}
Fraction.h
#include <iostream>
#include <string>
using namespace std;
class Fraction {
private:
int numerator;
int denominator;
int gcd() const;
public:
Fraction(const int numerator = 0, const int denominator = 0);
int getNumerator() const;
int getDenominator() const;
void setNumerator(const int numerator);
void setDenominator(const int denominator);
string toString() const;
double returnDecimal() const;
void reduce();
bool operator ==(const Fraction& f) const;
bool operator !=(const Fraction& f) const;
bool operator <(const Fraction& f) const;
bool operator <=(const Fraction& f) const;
bool operator >(const Fraction& f) const;
bool operator >=(const Fraction& f) const;
Fraction operator +(const Fraction& f) const;
Fraction operator -(const Fraction& f) const;
Fraction operator *(const Fraction& f) const;
Fraction operator /(const Fraction& f) const;
friend ostream& operator <<(ostream&, const Fraction&);
friend istream& operator >>(istream&, Fraction&);
};
La fraction est une classe. Vous avez besoin d'un objet de cette classe pour appeler ses fonctions (non statiques).
Fraction f;
f.getNumerator();