我是C ++的新手,我有一些问题。我看到operator ++
在复杂的数字上超载,我无法理解:
tmp
变量Complex &
,第二个运营商只是Complex
Complex&
的原因,但为什么)不要看意见的希腊文:)
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//
}
答案 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,您可以编写++x
或x++
。前者将执行++
,如果它是更大表达式的一部分,请使用新的x。后者也会执行++
,但是使用旧的x作为当前表达式(就像++
在当前表达式后面的一行)。
如果你重载++
,你需要分开,如果它是前缀或后缀
它看起来有点奇怪,但是如果你的意思是后缀版本,你需要有一个无名int
作为函数的参数(没有前缀)。没有有意义的价值传递或者什么,
这只是为了在两个可能性之间做出改变。
因此,在后缀变体中,您将拥有一个临时副本以保持
在你做++
时(旧的这一次返回旧值),旧值。