运算符 ++ 中的 Int 参数
Posted
技术标签:
【中文标题】运算符 ++ 中的 Int 参数【英文标题】:Int Argument in operator++ 【发布时间】:2011-06-07 05:55:34 【问题描述】:class myClass
public:
void operator++()
// ++myInstance.
void operator++(int)
// myInstance++.
除了让编译器区分myInstance++
和++myInstance
之外,operator++
中的可选int
参数实际上是否适用?如果有,是什么?
【问题讨论】:
【参考方案1】:正如@Konrad 所说,int 参数不用于任何用途,除了区分前增量和后增量形式。
但是请注意,您的运算符应该返回一个值。前增量应该返回一个引用,后增量应该按值返回。也就是说:
class myClass
public:
myClass& operator++()
// ++myInstance.
return * this;
myClass operator++(int)
// myInstance++.
myClass orig = *this;
++(*this); // do the actual increment
return orig;
;
编辑:
正如 Gene Bushuyev 在下面正确提到的,operator++
返回非 void 并不是绝对要求。但是,在大多数情况下(我想不出例外),您需要这样做。特别是如果您想将运算符的结果分配给其他值,例如:
myClass a;
myClass x = a++;
编辑2:
此外,对于 postimcrement 版本,您将在对象增加之前返回它。这通常使用本地临时来完成。见上文。
【讨论】:
返回某些东西可能是人们想要的,尽管这不是绝对的要求。此外,您可能会从operator++(int)
返回一个具有原始值的临时值,而不是*this
。这也不是绝对要求。
@Gene:是的,不是绝对要求。已编辑。【参考方案2】:
operator++ 中的可选 int 参数实际上是什么?
没有。唯一的目的是区分这两个重载。很失望,我知道。 ;-)
【讨论】:
以上是关于运算符 ++ 中的 Int 参数的主要内容,如果未能解决你的问题,请参考以下文章
利用接口做参数,写个计算器,能完成+-*/运算 定义一个接口Compute含有一个方法int computer(int n,int m); 设计四个类分别实现此接口,完成+-*/运算 (3