社区
C#
帖子详情
如何重载前缀 ++ 和后缀 ++ 运算符
waj2000
2004-04-22 03:24:56
如何重载前缀 ++ 和后缀 ++ 运算符,以及如何区别他们.
...全文
200
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
打赏
举报
回复
随便找本书,上面都有写.
C
++
中
重载
运算符
—
前缀
和
后缀
的区别
本文详细解析了
前缀
++
和
后缀
++
在C
++
中的不同作用,阐述了它们在
运算符
重载
中的具体实现方式。通过一个Point类的实例,展示了如何分别实现
前缀
++
和
后缀
++
的
重载
,强调了两者在返回值类型上的差异及其对左值操作的影响。
C
++
面试宝典第7题:
重载
自增自减
运算符
本文介绍了C
++
中
重载
前缀
和
后缀
自增自减
运算符
的原理和实现方法。通过示例代码解析了
前缀
++
和
后缀
++
的区别,强调了正确实现
后缀
++
的重要性,以确保与内置int类型行为一致。最后,提供了完整的CMyInteger类实现,帮助理解
运算符
重载
的细节。
C
++
重载
前缀
和
后缀
运算符
在C
++
中,类可以
重载
运算符
,对于
前缀
++
和
后缀
++
,两者有区别。
前缀
++
在使用后立即增加值,而
后缀
++
则先返回当前值再增加。为了区分
后缀
,
后缀
++
运算符
通常需要一个int参数,虽然该参数通常未使用,但作为区分标志。示例代码展示了如何定义这两个
运算符
重载
的方法。
“
++
” 和 “--” 的
重载
本文介绍了在C
++
2.1及更高版本中如何通过成员函数和友元函数
重载
前缀
和
后缀
自增
运算符
++
和自减
运算符
--。区别在于是否在
运算符
函数参数中加入int关键字来区分
前缀
和
后缀
形式。并给出了使用成员函数和友元函数的实例。
C
++
前缀
运算符
与
后缀
运算符
的区别
本文介绍了C
++
中
前缀
++
和
后缀
++
的区别及其在
运算符
重载
中的应用。
前缀
++
在操作后立即返回增加后的值,可以作为左值;
后缀
++
返回操作前的值,不能作为左值。通过示例展示了如何为Point类
重载
这两个操作符,分别实现对象自增并返回引用和创建临时对象返回未自增前的值。
C#
111,129
社区成员
642,535
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章