社区
C#
帖子详情
如何重载前缀 ++ 和后缀 ++ 运算符
waj2000
2004-04-22 03:24:56
如何重载前缀 ++ 和后缀 ++ 运算符,以及如何区别他们.
...全文
171
13
打赏
收藏
如何重载前缀 ++ 和后缀 ++ 运算符
如何重载前缀 ++ 和后缀 ++ 运算符,以及如何区别他们.
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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
打赏
举报
回复
随便找本书,上面都有写.
对类Point
重载
(自增,自减)
运算符
对类Point
重载
“
++
”(自增)、“--”(自减)
运算符
,要求同时
重载
前缀
和
后缀
。 使得下列主函数能够正确运行:
c
++
——
运算符
重载
(四) 源码
c
++
运算符
重载
的综合demo,知识点众多,内容强大。
自增
运算符
重载
自增
运算符
重载
C
++
程序,注释详细,简单明了,方便学习交流
C
++
运算符
重载
一些关于
运算符
重载
,引用,构造函数,析构函数,类信息识别等。感兴趣的可以看看
实验六函数
重载
与
运算符
重载
实验六函数
重载
与
运算符
重载
实验六函数
重载
与
运算符
重载
C#
111,097
社区成员
642,554
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章