++ operator overload c ++含义

时间:2014-11-24 22:45:21

标签: c++ overloading

我是C ++的新手,我有一些问题。我看到operator ++在复杂的数字上超载,我无法理解:

  1. 为什么我要创建tmp变量
  2. 为什么我的第一个运营商是Complex &,第二个运营商只是Complex
  3. 为什么要返回* this;(我知道Complex&的原因,但为什么)
  4. 如果我使用Complex而没有&会发生什么?(我运行它并得到相同的结果)
  5. 不要看意见的希腊文:)

    Complex &   Complex::operator ++(){
         r=r+1;
         return *this;//to this einai to pointer tou trexontos alla 8eloume dereference ara vazoume *this gia na epistrepsoume refernce//
    }
    
    Complex     Complex::operator ++(int ){
         Complex tmp(*this);
         operator ++();
            return tmp;//ftiaxnoume ena tmp tou antikimenou pou exoume meta efarmozoume to operator++ kai epistrefoume to tmp//
    }
    

3 个答案:

答案 0 :(得分:1)

不同的签名(Complex& vs Complex)是因为这些操作i ++和++我做了不同的事情。一个按值返回旧值(第二个)的副本,第一个返回对实际值的引用,如果x - 通过引用

需要tmp变量,因为你需要在递增值后返回旧值(这就是x ++的作用)

你需要返回对当前对象的引用 - 所以返回* this - 这是一个指向当前对象的指针; *这是对象

答案 1 :(得分:1)

2 - Complex &返回对同一对象的引用,Complex返回它的副本。

1 - 这就是创建临时变量的原因,为了增加实际对象但返回副本,以便模拟“使用然后增加”后缀运算符。

3 - 因为当i++返回i的副本(并增加i)时,++i会返回i递增。

4 - 操作员将返回递增对象的副本,而不是实际递增的对象。

答案 2 :(得分:0)

使用变量x,您可以编写++xx++。前者将执行++,如果它是更大表达式的一部分,请使用新的x。后者也会执行++,但是使用旧的x作为当前表达式(就像++在当前表达式后面的一行)。

如果你重载++,你需要分开,如果它是前缀或后缀 它看起来有点奇怪,但是如果你的意思是后缀版本,你需要有一个无名int作为函数的参数(没有前缀)。没有有意义的价值传递或者什么,
这只是为了在两个可能性之间做出改变。

因此,在后缀变体中,您将拥有一个临时副本以保持
在你做++时(旧的这一次返回旧值),旧值。