【发布时间】:2019-05-05 16:44:49
【问题描述】:
我正在做一个家庭作业项目,旨在向我们介绍课程。我刚刚开始,但由于某种原因,我的成员变量一直正确显示到最后。它应该只是在函数之间传递这些变量然后输出它们。它将采用参数化构造函数设置的分子和分母,用它们设置一个对象,然后输出分子和分母所持有的内容。它正在获取分子并将其设置为零,即使它之前在该类运行的每个函数中都显示了正确的数字。分母更奇怪,因为它以某种方式变成了一个巨大的数字。我只是想了解发生了什么,因为我是新手,以及为什么对我来说不是很明显。
#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
【问题讨论】:
-
初始化你的变量。
-
为什么在default-constructor中使用初始化列表而不在另一个中使用?
-
另请注意,成员变量名称等于函数参数 (
number, denom) 充其量是误导,并且肯定是错误的简单来源