如何重载前缀 ++ 和后缀 ++ 运算符

waj2000 2004-04-22 03:24:56
如何重载前缀 ++ 和后缀 ++ 运算符,以及如何区别他们.
...全文
160 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
turnmissile 2004-04-27
  • 打赏
  • 举报
回复
to cppTrier(JustinShen):
嗬嗬,你的方法确实管用,我也知道为什么我以前的方法不能区分了。多谢了,我又长了一点经验值。

你用的是:
integer t_i = new integer(i.i);
t_i.i++;
return t_i;
我的是:
i.i++;
return i;

难怪不行。
cppTrier 2004-04-24
  • 打赏
  • 举报
回复
问题的关键是在写++的时候,必须生成一个新的对象。这和编译器生成前缀++和后缀++的IL代码有关,如果不new一个新的对象,并返回,两种情况就一样了。
waj2000 2004-04-24
  • 打赏
  • 举报
回复
我的这个问题的顺利解决得益于大家的热心帮忙,我在 特意向 cpptrier 表示我最诚挚的谢意,是他完整的解决了我的问题.其次,我要向turnmissle表达我的谢意,是他第一个明白了我的意图,并给出了您以前的经验.也谢谢其他参与的人.

cppTrier 2004-04-24
  • 打赏
  • 举报
回复
呀,查了一下msdn,发现自己说错了,与其它说不能区分,不如说你只要提供一个实现,编译器会自动帮你区别前缀++和后缀++ 请参考这个例子:

public class integer
{
public int i;
public integer(int p_i)
{
this.i = p_i;
}


public static integer operator ++(integer i)
{
integer t_i = new integer(i.i);
t_i.i++;
return t_i;

}
public override string ToString()
{
return this.i.ToString();
}


}

class Class1
{
[STAThread]
static void Main(string[] args)
{
integer i = new integer(1);
Console.WriteLine(i);  //输出1;
Console.WriteLine(i++); //输出1
Console.WriteLine(i);  //输出2
Console.WriteLine(++i); //输出3
Console.WriteLine(i);  //输出3
}
}

请顺便参考《C# language specification》 10.9.1节

ms-help://MS.MSDNQTR.2003JUL.1033/csspec/html/vclrfcsharpspec_10_9_1.htm
cppTrier 2004-04-24
  • 打赏
  • 举报
回复
很遗憾,在C#中,重载后的++或者--操作符是没有办法区分前后缀的。
SimerJoe 2004-04-24
  • 打赏
  • 举报
回复
++可以重载。
我记得+= 和 =+只要重载+号就行了,
++可能也一样!
waj2000 2004-04-24
  • 打赏
  • 举报
回复
你们的星星好耀眼,请你们也照耀我一下.
mvp 们,请帮一下忙好吗.
turnmissile 2004-04-23
  • 打赏
  • 举报
回复
c#里面是不允许自定义的操作符区分++i 和i++的,
我以前做过一个测试,结果是一样的。

waj2000 2004-04-23
  • 打赏
  • 举报
回复
谢谢,turnmissile,您明白了我的意思,并给出了您以前的经验.
鉴于我说的不太明白,以至于其他人误解了我的意思

比如 在 c++ 中重载前缀 ++ 可以使用
int 关键字作为参数 比如:
#include <stdio.h>
#include <iostream.h>
class test
{
public:
int a;
public:
test operator ++(){
a++;
return *this;
}
test operator ++(int){ //重载前缀
test test1=*this;
a++;
return test1;
}
};

int main(int argc, char *argv[])
{
test test2;
test2.a = 200;
cout << (test2++).a << endl;
test2.a = 200;
cout << (++test2).a << endl;
return 0;
}

那么c# 那?

w777 2004-04-22
  • 打赏
  • 举报
回复
public static string operator++(string x)
{
return x+x;
}

没测试,也许不对,关键是operator++,可以查查msdn
lizhongkun 2004-04-22
  • 打赏
  • 举报
回复
++i
is i+1 before read i;
i++
is read i before i+1;
waj2000 2004-04-22
  • 打赏
  • 举报
回复

如果随便找本书,上面都有写,我也不用放在这了.
希望高手帮忙.
aspbiz 2004-04-22
  • 打赏
  • 举报
回复

随便找本书,上面都有写.

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧