如何修复分数类的重载+运算符的输出?

杰克·斯内克·罗伯茨

我对我的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");
}

我删除了操作员*和操作员/,因为它们可以正常工作。我不知道我做错了什么,在我发布这个问题之前,我已经一遍又一遍地研究了数学。是因为我没有使用指针吗?一个const?还是有所不同?在此先感谢您的帮助!

小姐

这行是错误的:

if (denominator = fraction.denominator) {

它一定要是

if (denominator == fraction.denominator) {

如果启用了警告,则clang和gcc会告诉您,例如:

main.cpp:32:19: warning: using the result of an assignment as a condition without parentheses [-Wparentheses]

  if (denominator = fraction.denominator) {

      ~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~

live example

如果您更正了以上错误,您的代码将起作用:

输出

20/32

live example

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Python:运算符重载意外输出?

来自分类Dev

如何使 & 命令运算符的输出无效?

来自分类Dev

实现Matrix类加法运算符重载奇怪的输出

来自分类Dev

运算符重载分数

来自分类Dev

运算符-类重载

来自分类Dev

类的=运算符重载

来自分类Dev

运算符-类的重载

来自分类Dev

使用运算符重载的程序会产生垃圾输出

来自分类Dev

C ++用重载的输出运算符替换toString

来自分类Dev

用模板重载<<运算符以更改输出

来自分类Dev

<< / >>运算符重载和输入/输出功能之间的区别

来自分类Dev

与重载的ostream运算符<<的directory_entry输出冲突

来自分类Dev

没有输出流意图的重载运算符“ <<”

来自分类Dev

C ++用重载的输出运算符替换toString

来自分类Dev

重载<<运算符

来自分类Dev

重载<<运算符

来自分类Dev

重载'-'运算符

来自分类Dev

*运算符重载

来自分类Dev

()运算符重载

来自分类Dev

运算符重载

来自分类Dev

()运算符重载

来自分类Dev

运算符<<重载

来自分类Dev

重载 >> 运算符

来自分类Dev

输出运算符如何知道字符数组的大小?

来自分类Dev

分数类型的重载运算符<,==

来自分类Dev

如何使我的重载分数>>运算符识别负数。

来自分类Dev

如何防止来自'&'和'>'运算符的输出(发送给后台运算符和重定向运算符)

来自分类Dev

如何防止来自'&'和'>'运算符的输出(发送给后台运算符和重定向运算符)

来自分类Dev

运算符重载-重载*