I have a question about my fractionType class. I am coding it for an assignment and the assignment requires I overload the basic arithmetic operators (+, - , /, *) the logical operators (==, <, >, =<, =>) and the system operators (<<, >>) So far, the I have system operators working, as well as the multiplication and division operators. My problem came up when I tested the + and - operators. My input is hard coded as 2/4 and 1/8, but my output is 3/8. This is not right.
My code from fractionType.cpp
#include <iostream>
#include "fractionType.h"
fractionType::fractionType(){
}
fractionType::fractionType(int a, int b) {
numerator = a;
denominator = b;
}
fractionType fractionType::operator+(fractionType fraction) {
fractionType anotherFraction;
if (denominator = fraction.denominator) {
anotherFraction.numerator = numerator + fraction.numerator;
anotherFraction.denominator = denominator;
}
if (denominator != fraction.denominator) {
anotherFraction.numerator = ((numerator) * (fraction.denominator)) + ((fraction.numerator) * (denominator));
anotherFraction.denominator = denominator * fraction.denominator;
}
return anotherFraction;
}
fractionType fractionType::operator-(fractionType fraction) {
fractionType anotherFraction;
if (denominator = fraction.denominator) {
anotherFraction.numerator = numerator - fraction.numerator;
anotherFraction.denominator = denominator;
}
else {
anotherFraction.numerator = (numerator * fraction.denominator) - (fraction.numerator * fraction.denominator);
anotherFraction.denominator = denominator * fraction.denominator;
}
return anotherFraction;
}
My code from fractionType.h
#include <iostream>
class fractionType {
public:
fractionType(int a, int b);
fractionType();
fractionType operator*(fractionType fraction);
fractionType operator/(fractionType fraction);
fractionType operator+(fractionType fraction);
fractionType operator-(fractionType fraction);
friend std::ostream& operator<<(std::ostream& out, const fractionType &fraction) {
out << fraction.numerator << '/' << fraction.denominator;
return out;
}
friend std::istream& operator>> (std::istream& in, fractionType &fraction) {
char c;
in >> fraction.numerator >> c >> fraction.denominator;
return in;
}
private:
int numerator, denominator;
};
#endif FRACTIONTYPE_H
and my source.cpp
#include <iostream>
#include "fractionType.h"
int main() {
fractionType aFraction(2, 4);
fractionType bFraction(1, 8);
fractionType cFraction;
cFraction = aFraction + bFraction;
std::cout << cFraction << std::endl;
system("PAUSE");
}
I cut out my operator* and operator/, because they work properly. I have no clue what I've done wrong, i've gone over the math over and over again before I posted this question. Is it because I didn't use a pointer? a const? Or is it something different? Thanks in advance for the help!
This line is wrong:
if (denominator = fraction.denominator) {
It has to be
if (denominator == fraction.denominator) {
If warnings are enabled, clang and gcc tell you that, e.g.:
main.cpp:32:19: warning: using the result of an assignment as a condition without parentheses [-Wparentheses]
if (denominator = fraction.denominator) {
~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
If you correct the above error, your code works:
output
20/32
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句