-2

我必须实现Rational类才能获得有理分数。该header.h文件由我的导师提供,因此我必须跟进。我还必须在函数中编写复制构造Rational::Rational(const Rational& cRational)函数,以便object可以复制。我已经编写了我的代码,但是在输出中添加分数是错误的。有人可以帮我解决这个问题吗?我的编码有什么问题,Rational::addition(const Rational &a)或者我该如何解决?

输出 :

 Begin Rational Class Tests

Testing default constructor: 1/1

Testing std constructor: 1/2

Testing copy constructor: 1/2

Testing addition: 4/4 + 1/2 = 4/4    // it should be 1/2 + 1/2 = 4/4

主功能:

int main()
{
    cout << "Begin Rational Class Tests\n\n";

    cout<<"Testing default constructor: ";
    Rational n1;
    n1.printRational();
    cout << endl << endl;

    cout<<"Testing std constructor: ";
    Rational n2(1,2);
    n2.printRational();
    cout << endl << endl;

    cout<<"Testing copy constructor: ";
    Rational n3(n2);
    n3.printRational();
    cout << endl << endl;

    cout<<"Testing addition: ";
    n1 = n2.addition(n3);
    n2.printRational();
    cout <<" + ";
    n3.printRational();
    cout <<" = ";
    n1.printRational();
    cout << endl << endl;
}

头文件:

class Rational {
  public:
    Rational();  // default constructor
    Rational(int, int); //std (initialisation) constructor
    Rational(const Rational&); //copy constructor
    Rational addition(const Rational &);
    void printRational();
  private:
    int numerator;
    int denominator;
};

我的程序:

//default constructor
Rational::Rational() 
{
   numerator = 1;
   denominator = 1;
}
//initialize constructor
Rational::Rational(int n, int d)
{
     numerator = n;
     if (d==0) 
     {
        cout << "ERROR: ATTEMPTING TO DIVIDE BY ZERO" << endl;
        exit(0); // will terminate the program if division by 0 is attempted
     }
     else
        denominator = d;
}
//copy constructor
Rational::Rational(const Rational& cRational)
{
    numerator = cRational.numerator;
    denominator = cRational.denominator;
}
//addition
Rational Rational::addition(const Rational &a)
{
     numerator = numerator * a.denominator + a.numerator * denominator;
     denominator = denominator * a.denominator;
     return Rational(numerator,denominator);
}

void Rational::printRational()
{
    cout << numerator << "/" << denominator ;
}
4

2 回答 2

1

您的加法函数正在修改 的成员变量*this,这会导致奇怪的事情发生。
更合适的原型是

Rational addition(const Rational &) const;

因为这会让编译器告诉你你在做一些奇怪的事情。

您可以使用局部变量而不是分配给成员,也可以完全不使用中间变量:

Rational Rational::addition(const Rational &a)
{
     return Rational(numerator * a.denominator + a.numerator * denominator, 
                     denominator * a.denominator);
}
于 2018-05-15T07:39:38.040 回答
1

只需为 add() 中的分子和分母的新值创建具有不同名称的新变量,有点像这样......

int n, d;  //you could use better names
n = numerator * a.denominator + a.numerator * denominator;
d = denominator * a.denominator;
return Rational(n, d);

我检查了,这在这里有效。

通常,不要对同一范围内的两个变量使用相同的名称。

于 2018-05-15T06:01:43.723 回答