2014-11-24 98 views
-1

我是C++新手,我有一些问题。我看到operator ++超载在复杂的号码,我无法理解:++ operator overload C++含义

  1. 为什么我创建了一个tmp变量
  2. 为什么我的第一家运营商是Complex &和第二它只是Complex
  3. 为什么返回*本;(我知道原因的Complex&偏偏)
  4. ,如果我使用复杂而不&发生了什么会吗?(我运行它和它相同的结果)

别看评论这是希腊:)

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

请参阅http://stackoverflow.com/a/4445969/78845,了解C++中的前后增量运算符的解释。 – Johnsyweb 2014-11-24 22:51:40

+0

[Post-increment和Pre-increment概念?]可能的重复(http://stackoverflow.com/questions/4445706/post-increment-and-pre-increment-concept) – Johnsyweb 2014-11-24 23:00:08

回答

1

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

tmp变量是必需的,因为您需要在递增后返回旧值值(这就是x ++所做的)

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

+0

如果我使用复杂而没有&什么是发生了什么? – user3135218 2014-11-24 23:15:01

+0

为什么不找出 – pm100 2014-11-25 00:23:03

0

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

如果您重载++,您需要分开,如果它是前缀或后缀。
它看起来有点奇怪,但如果你的意思是后缀版本,你需要有一个无名的int作为函数的参数(前缀无)。没有意义的价值通过什么,
它只是为了使这两种可能性有所不同。

所以,在后缀变型,you'll有一个临时副本,以保持
旧的价值,同时you're做++(蚂蚁返回旧值此一次)。

1

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

1 - 这就是为什么会创建一个临时变量,以便增加实际对象但返回副本,以便模拟“使用然后递增”后缀操作符。

3 - 因为而i++返回i副本(和增量i),++i返回i递增。

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

+0

如果我使用复杂没有&会发生什么? – user3135218 2014-11-24 23:21:44

+2

@ user3135218 - 在这种特殊情况下没有什么不好。 ++运算符将返回递增对象的副本,而不是递增对象。但是当你做运算符重载时,你应该遵循正确的约定来返回类型和参数。 – dtech 2014-11-24 23:30:42