社区
C#
帖子详情
如何重载前缀 ++ 和后缀 ++ 运算符
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
打赏
举报
回复
随便找本书,上面都有写.
对类Point
重载
(自增,自减)
运算符
对类Point
重载
“
++
”(自增)、“--”(自减)
运算符
,要求同时
重载
前缀
和
后缀
。 使得下列主函数能够正确运行:
新建文本文档.txt
定义日期(Date)类: 属性: int类型的年、月、日 成员函数: 构造函数 Print函数:以”年/月/日”的形式输出
重载
以下
运算符
:
重载
以下
运算符
: +(Date,int) 友元函数方式
重载
-(Date,int) 友元函数方式
重载
++
成员函数方式
重载
(
前缀
和
后缀
,
前缀
加一天,
后缀
加一年) -- 成员函数方式
重载
(
前缀
和
后缀
,
前缀
减一天,
后缀
减一月)
张逸凯_171840708_高级程序设计第四次作业1
一、 C
++
中操作符
重载
应遵循哪些基本原则 二、请简述操作符
重载
的几种实现途径 三、
重载
前缀
“
++
”
运算符
与
重载
后缀
“
++
”
运算符
在形式上有什么不同 一、定义
point自加自减预算
c
++
的
运算符
重载
关于point的自加自减运算 Point operator
++
(); //
前缀
运算符
重载
函数的声明 Point operator
++
(int); //
后缀
运算符
重载
函数,加int参数以示区分
Operator_overloading:编写一个类来实现复数在数学中的工作方式
Operator_overloading 编写一个类来实现复数在数学中的工作方式。 复数可以表示为a + bi ,其中a和b是实数。 您没有获得完整的Complex类: class Complex { public: Complex ():real( 0 ), ima( 0 ){}; ~Complex (); float real; float ima; 任务: 实现一个构造函数,该构造函数将初始实数和虚数作为2个参数。 实现一个副本构造函数。 实现一个副本分配
运算符
。 该类将支持“
++
”(作为
后缀
)和“-”(作为
前缀
)
运算符
。 complex
++
应该将实部增加1。 --complex应该将实部减少1。 示例: c=Complex(1,2); c
++
; c=Complex(1,2); c
++
; , c = 2 + 2i 示例: c=Complex(
C#
110,534
社区成员
642,575
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章