我制作了一个程序来实现c ++中的分数。我之所以这样做,是因为它是我在家里跟随的c ++课程的一种功课。程序编译但在启动后会很快崩溃。我自己搜索一个答案,我发现只是在创建一个新对象时它会崩溃。这是错误的代码。
//a and b are for the numerators and denominator in the fraction: a/b
ZFraction::ZFraction(int numer, int denom):m_numer(numer), m_denom(denom)//this constructor made it crash
{
if(m_numer != 0)
{
m_numer = m_denom % m_numer;
m_denom = m_denom/m_numer;
}
else
{
cout << "Fraction impossible";
}
}
为什么会崩溃?提前谢谢。
答案 0 :(得分:1)
m_numer
的值在各部门之间发生变化。例如,如果您有denom = 20
和numer = 10
,那么
m_numer = m_denom % m_numer
指定m_numer = 0
。然后在计算m_denom
时得到除零。我建议用原始值进行计算,即
ZFraction::ZFraction(int numer, int denom):m_numer(numer), m_denom(denom)
{
if(numer != 0)
{
m_numer = denom % numer;
m_denom = denom/numer;
}
else
{
cout << "Fraction impossible";
}
}
在旁注中,考虑抛出异常而不是写在cout上,这样,如果numer == 0
,你就不会有伪造值的构造对象。
此外,分子是分数顶部的名称,而不是底部的名称。