繁体   English   中英

当我没有编码时,为什么我的班级会执行算术运算?

[英]Why is my class performing arithmetic when I haven't coded any?

我正在做一个家庭作业项目,该项目应该向我们介绍课程。 我才刚刚开始,但是由于某种原因,我的成员变量正确显示直到结束。 它应该只是在函数之间传递这些变量,然后输出它们。 它需要一个由参数化构造函数设置的分子和分母,并用它们设置一个对象,然后输出分子和分母所保存的内容。 它使用分子并将其设置为零,即使该分子先前在类运行的每个函数中显示了正确的数字也是如此。 分母更加奇怪,因为它以某种方式变成了很多数字。 我只是想了解由于我是新手而发生的事情,以及为什么对我而言并不那么明显的原因。

#include <iostream>

using std::cout;
using std::endl;
using std::ostream;

class RationalNum
{
public:
    RationalNum();
    RationalNum(int numer, int denom);
    int getNumerator() const { return numer; }
    int getDenominator() const { return denom; }
    void setNumerator(int);
    void setDenominator(int);
    void set(int& numer, int& denom);
    void output(ostream& outs);

private:
    int denom;
    int numer;
};

RationalNum::RationalNum() : numer(1), denom(1)
{}

RationalNum::RationalNum(int numer, int denom) //takes two integers for numer and denom, and reduces
{
    cout << "The numer and denom  in the param const are " << numer << denom << endl;
    set(numer, denom);
}

void RationalNum::set(int& numer, int& denom) //use other functions to take two params and set as numer and denom

{
    cout << "The numer and denom in set are " << numer << denom << endl;
    setNumerator(numer);
    setDenominator(denom);
}

void RationalNum::setNumerator(int numer) //takes an int, sets it as numer, and reduces it
{
    cout << "in setNumer, the numer is: " << numer << endl;
    //reduce(newNumer); //Not using yet
}

void RationalNum::setDenominator(int denom) //takes an int, sets it as denom, and reduces it
{
    cout << "in setDenom, the denom is: " << denom << endl;
    //reduce(newDenom); //Not using yet
}

void RationalNum::output(ostream& outs) //takes an ostream param
{
    cout << numer << "/" << denom << endl;
}


int main()
{
    RationalNum rn1, rn2(25, 10), rn3(24, -100);

    cout << "rn1 contains: ";
    rn1.output(cout);
    cout << endl;

    cout << "rn2 contains: ";
    rn2.output(cout);
    cout << endl;

    cout << "rn3 contains: ";
    rn3.output(cout);
}

这就是实际结果。 直到最后两行都是正确的,那是我迷路的地方。 rn2应该显示25/10,而rn3应该显示24 / -100

The numer and denom  in the param const are 2510
The numer and denom in set are 2510
in setNumer, the numer is: 25
in setDenom, the denom is: 10

The numer and denom  in the param const are 24-100
The numer and denom in set are 24-100
in setNumer, the numer is: 24
in setDenom, the denom is: -100
rn1 contains: 1/1    
rn2 contains: 0/4196160    
rn3 contains: 0/4197376

setNumeratorsetDenominator方法没有做任何事情。 出于这个原因,类成员denomnumer永不初始化。 因此,它们的值将是不确定的,即可能是垃圾。

要解决此问题,请使用:

void RationalNum::setNumerator(int n)
{
  numer = n; // I changed the parameter name to avoid confusion with the member
  cout << "in setNumer, the numer is: " << numer << endl;
  //reduce(newNumer); //Not using yet
}

对分母使用类似的方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM