【发布时间】:2016-11-28 08:26:36
【问题描述】:
我对我的 fractionType 课程有疑问。我正在为赋值进行编码,并且赋值要求我重载基本算术运算符(+、-、/、*)、逻辑运算符(==、、=)和系统运算符(>) 到目前为止,我有系统运算符工作,以及乘法和除法运算符。当我测试 + 和 - 运算符时,我的问题出现了。 我的输入被硬编码为 2/4 和 1/8,但我的输出是 3/8。这是不对的。
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;
}
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
还有我的 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");
}
我删除了 operator* 和 operator/,因为它们可以正常工作。 我不知道我做错了什么,在我发布这个问题之前,我已经一遍又一遍地复习了数学。是因为我没有使用指针吗?一个常量?还是有什么不同?提前感谢您的帮助!
【问题讨论】:
-
调高你的警告级别,你应该从编译器那里得到至少一个相关的警告。适当地使用
const(对于您不打算更改的内容),这将是一个错误。目前,你不能添加两个常数分数,这是没有意义的。 -
你能帮我看看这个吗?我想成为一个更好的编码员,但我不知道我在哪里做这件事。
-
@JakeTheSnakeRoberts 这就是codereview.stackexchange.com 的用途
-
@m.s.不,代码审查不会修复损坏的代码——这个问题在那里会非常离题。请阅读A Guide to Code Review for Stack Overflow Users 以避免不当推荐。
-
不,我的意思是我在哪里声明了所有内容。我将使用 codereview。
标签: c++ output operators overloading