【问题标题】:fraction class increment operator overloading explained分数类增量运算符重载解释
【发布时间】:2013-07-26 09:41:32
【问题描述】:

从上学期开始,我已经考虑了很多(老实说)。而且我仍然不完全确定这里发生了什么。任何人都可以帮助和启发我吗?我可以接受前/后缀的区别。这就是分数是如何增加的,这让我很困惑

以前缀为例。 那么,如果我有一个 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;

提前致谢 :)

【问题讨论】:

  • 为什么是 2+2+4? numer 为 2,denom 为 4。因此,numer += denom; 使 numer 为 6。

标签: c++ overloading operator-keyword increment fractions


【解决方案1】:

前缀函数会拼写成

numer = numer + denom;

所以如果是2/4,它将是numer = 2 + 4 = 6,所以结果将是6/4(因为denom 保持不变)。由于 n/n = 1 对于所有整数(0 除外),(a+n)/n 将始终增加 1

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

【讨论】:

  • 您可能会明确指出,这相当于在数字上添加1。 (至少对于正数;如果denom 为负数,我怀疑该算法是否有效。)
  • @JamesKanze 真的。但我希望大多数分数实现仅将符号存储在分子中。
  • @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
猜你喜欢
  • 2017-07-06
  • 2010-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-11-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多