use*_*112 2 c++ reference operator-overloading increment
我看到这个C++代码是一个更大的例子的一部分:
Date &Date::operator++()
{
helpIncrement();
return *this;
}
Date Date::operator++( int )
{
Date temp = *this;
helpIncrement();
return temp;
}
Run Code Online (Sandbox Code Playgroud)
首先,如果Date temp = *this,那么我不明白为什么这两个函数的返回类型是不同的?一个返回*this,另一个返回temp,分配给*this?
其次,为什么第二个函数的参数没有变量名?
第一个返回指向的对象this作为引用.也就是说,返回的对象是该对象operator++被称为上.但是,当你这样做时Date temp = *this,temp是从值中复制构造的*this.然后将其复制出函数.你从第二个函数得到的是一个全新的对象.为什么函数有这种差异在第二个问题的答案中解释.
增量运算符有两种类型 - 一种是post-increment(i++),另一种是pre-increment(++i).为了能够单独重载它们(尽管它们具有相同的名称operator++),C++标准指定后增量运算符采用int具有未指定值的类型的参数.这很简单,您可以为操作员的每次使用重载该功能.由于您不太可能想要使用未指定的值,因此您可以将其保留为未命名.
现在,预增量运算符的预期行为是它递增对象并评估为该对象.这就是它在这种情况下返回引用的原因.后增量的预期行为是它保留原始值的副本,递增对象然后返回原始值.因此,它返回temp副本.
| 归档时间: |
|
| 查看次数: |
510 次 |
| 最近记录: |