问题描述
usingSystem;usingSystem.Collections.Generic;usingSystem.Text;namespace重载{classComplex{doubler,v;publicComplex(doublem,doublen){r=m;v=n;}publicstaticComplexoperator+(Complexa,Complexb){returnnewComplex(a.r+b.r,a.v+b.v);}publicstaticComplexoperator++(Complexa){doubler=a.r+1;doublev=a.v+1;returnnewComplex(r,v);}publicvoidPrint(){Console.WriteLine(r+"+"+v+"i");}}classProgram{staticvoidMain(string[]args){Complexa=newComplex(3,4);Complexb=newComplex(5,6);Complexc=a+b;c.Print();Complexe=a++;e.Print();stringa1;a1=Console.ReadLine();}}}结果是8+10i3+4i第一个我明白可是3+4i我就不懂了明明应该是4+5i我用断点跟踪时也看到r=4,v=5的急死了请大虾赐教!
解决方案
解决方案二:
呵呵LZ运算符的优先级没有搞清楚。赋值运算符=的优先级比++高。Complexe=a++;这一句是先把a的值赋给e,然后再累加。
解决方案三:
你把++放前面试试。
解决方案四:
a++;是先使用后加,改为++a
解决方案五:
楼主,您的doubler,v;...和publicstaticComplexoperator++(Complexa){doubler=a.r+1;doublev=a.v+1;returnnewComplex(r,v);}是一样的r,v么,应该不是!您在这个方法里重新定义了,在内存分配中,就是分配在栈内,把上面的doubler,v;给隐藏了.所以当然是那个结果.您可以把方法里的double去掉.试试看.随便乱说说,希望能起到抛砖引玉的效果.谢谢
解决方案六:
最清晰的思路publicstaticComplexoperator++(Complexa){this.r=a.r+1;this.v=a.v+1;returnnewComplex(r,v);}其他都可以不边,把double变this,或者把double删除掉也OK.