C++ 解释了分数类增量运算符重载

C++ 解释了分数类增量运算符重载,c++,overloading,operator-keyword,increment,fractions,C++,Overloading,Operator Keyword,Increment,Fractions,从上学期开始,我(诚实地)对此进行了很多思考。我仍然不能完全确定这里发生了什么。有谁能帮助和启发我吗?我同意前后的区别。分数是如何递增的,这让我很困惑 以前缀为例。 如果我有一个分数是2/4,它会增加到3/4吗?因为当我看numer+=denom时,它会让我认为它会返回2+2+4,也就是8 // prefix increment operator fraction& fraction::operator++() { numer += denom; return *this

从上学期开始,我(诚实地)对此进行了很多思考。我仍然不能完全确定这里发生了什么。有谁能帮助和启发我吗?我同意前后的区别。分数是如何递增的,这让我很困惑

以前缀为例。 如果我有一个分数是2/4,它会增加到3/4吗?因为当我看numer+=denom时,它会让我认为它会返回2+2+4,也就是8

// prefix increment operator
fraction& fraction::operator++() {
    numer += denom;
    return *this;
}

// postfix increment operator
fraction fraction::operator++(int) {        // Note dummy int argument
    fraction temp(*this);
    ++*this;                            // call the prefix operator
    return temp;

提前感谢堆:)

前缀函数将向

numer = numer + denom;
因此,在
2/4
的情况下,它将是
numer=2+4=6
,因此结果将是
6/4
(因为denom保持不变)。由于所有整数(除了
0
)的
n/n=1
(a+n)/n
将始终增加
1


后缀版本使用前缀版本进行上述计算。

为什么是2+2+4
numer
为2,
denom
为4。因此,
numer+=denom
使
numer
6。您可以明确指出,这相当于将
1
添加到数字中。(至少对于正数;如果
denom
为负数,我怀疑算法是否有效。)@JamesKanze-True。但我希望大多数分数实现只将符号存储在分子中。@JamesKanze感谢您的建议,采纳了它。@Angew我希望大多数分数实现只将符号存储在分子中,而不使用公分母来“规范化”表示。但由于给出的例子是2/4,这不是标准化的,我不确定,我认为值得指出。@JamesKanze如果
denom
是负数,为什么算法不起作用<代码>(a+n)/n=a/n+n/n=a/n+1,或者在具体示例中
1/-2++=(1+-2))/(-2)=-1/-2)=1/2