C++ 如何修复分数类的输出';s重载+;操作人员

C++ 如何修复分数类的输出';s重载+;操作人员,c++,output,operators,overloading,C++,Output,Operators,Overloading,我有一个关于我的fractionType课程的问题。我正在为赋值编码,赋值要求我重载基本算术运算符(+、-、/、*)、逻辑运算符(=、=)和系统运算符() 到目前为止,我已经使用了系统运算符,以及乘法和除法运算符。我的问题是在测试+和-运算符时出现的。 我的输入被硬编码为2/4和1/8,但我的输出是3/8。这是不对的 fractionType.cpp中的我的代码 #include <iostream> #include "fractionType.h" fractionType::

我有一个关于我的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”
fractionType::fractionType(){
}
fractionType::fractionType(整数a、整数b){
分子=a;
分母=b;
}
fractionType fractionType::运算符+(fractionType分数){
另一个分数的分形类型;
if(分母=分数分母){
另一个分数。分子=分子+分数。分子;
另一个分数。分母=分母;
}
if(分母!=分数分母){
另一个分数.分子=((分子)*(分数.分母))+((分数.分子)*(分母));
另一个分数。分母=分母*分数。分母;
}
返回另一个分数;
}
fractionType fractionType::运算符-(fractionType分数){
另一个分数的分形类型;
if(分母=分数分母){
另一个分数。分子=分子-分数。分子;
另一个分数。分母=分母;
}
否则{
另一个分数。分子=(分子*分数。分母)-(分数。分子*分数。分母);
另一个分数。分母=分母*分数。分母;
}
返回另一个分数;
}
我的代码来自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
#包括
类分形类型{
公众:
分形类型(内部a、内部b);
fractionType();
fractionType运算符*(fractionType分数);
fractionType运算符/(fractionType分数);
fractionType运算符+(fractionType分数);
fractionType运算符-(fractionType分数);
friend std::ostream&operator>c>>分数分母;
返回;
}
私人:
整数分子、分母;
};
#endif分形类型
还有我的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");
}
#包括
#包括“fractionType.h”
int main(){
分形类型的分形(2,4);
断裂类型B断裂(1,8);
分形类型;
c牵引=牵引+牵引;
std::cout这行是错误的:

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) {

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

如果您更正了上述错误,您的代码将正常工作:

输出

20/32

提高您的警告级别,您应该至少从编译器获得一个相关警告。适当地使用
const
(对于您不打算更改的内容)这将是一个错误。目前,你不能添加两个常量分数,这毫无意义。你能帮我检查一下吗?我想成为一个更好的编码员,但我不知道我在哪里做这些。@JakeTheSnakeRoberts这就是问题所在for@m.s.不,代码审查并不能修复损坏的代码-这个问题在那里会非常离题。请阅读以避免不适当的推荐。不,我是说我在哪里声明了所有常量。我将使用codereview。是的,这给了我正确的输出。非常感谢你,你是一个英雄。