C++:关于单目运算符重载::::::::::::::::::::::::::::::::::::::::::::::::::::::::

ABCABE 2012-11-16 03:30:02
#include<iostream>
using namespace std;
class Complex {
public:
int re, im;
Complex(int r, int i) :
re(r), im(i) {
}
Complex& operator++();
const Complex operator++(int);
};
Complex& Complex::operator ++()
{
re++; //这里用re++和++re有区别吗?
im++;
return *this;
}
const Complex Complex::operator++(int) //这里用const有什么作用呢,试验发现返回的对象可以改变其值不是不可变的啊-.-
{
Complex oldValue = *this;
++(*this); //这里用++(*this)和(*this)++有区别吗?
return oldValue;
}
int main() {
Complex param1(3, 4);
Complex param2(2, 3);
Complex param3(6, 7);
Complex param4(3, 9);
param1.operator ++();
cout<<"param1:"<<"("<<param1.re<<","<<param1.im<<")"<<endl;
Complex temp=param2.operator++(0);
temp.im+=9;
cout<<"asdlkfj:"<<temp.im<<endl;
cout<<"temp:"<<"("<<temp.re<<","<<temp.im<<")"<<endl;
cout<<"param2:"<<"("<<param2.re<<","<<param2.im<<")"<<endl;
param3++;
cout<<"param3:"<<"("<<param3.re<<","<<param3.im<<")"<<endl;
Complex temp2=param4++;
temp2.im+=9;
cout<<"asdlkfj:"<<temp2.im<<endl;
cout<<"temp2:"<<"("<<temp2.re<<","<<temp2.im<<")"<<endl;
cout<<"param4:"<<"("<<param4.re<<","<<param4.im<<")"<<endl;

return 0;
}


最后25分拿来孝敬前辈们了-.-
...全文
117 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
漫步者、 2012-11-16
  • 打赏
  • 举报
回复
1,没有区别 2,const,修饰返回值,个人加上为了保证数据的安全性 3,没有什么区别,
tonywearme 2012-11-16
  • 打赏
  • 举报
回复
引用 2 楼 ABCABE 的回复:
原运行结果是: C/C++ code?123456789param1:(4,5)asdlkfj:12temp:(2,12)param2:(3,4)param3:(7,8)asdlkfj:18temp2:(3,18)param4:(4,10) 但是如果第三个改成(*this)++; 运行结果就变成: C/C++ code?1param1:(4,5)其他的值都……
...没仔细看。你这样改就变成递归调用了。
derekrose 2012-11-16
  • 打赏
  • 举报
回复
第二个如果你想令返回值为常量,那么应该使用引用。但是你这个地方没必要用引用啊,我感觉应该是上面那个重载,当然调用++a的时候,那么这个东西不许做左值,那么可以用const
ABCABE 2012-11-16
  • 打赏
  • 举报
回复
从网上找到这句话:
引用
一般情况下,函数的返回值为某个对象时,如果将其声明为const时,多用于操作符的重载。
但是也没告诉我为什么要这样写
ABCABE 2012-11-16
  • 打赏
  • 举报
回复
原运行结果是:

param1:(4,5)
asdlkfj:12
temp:(2,12)
param2:(3,4)
param3:(7,8)
asdlkfj:18
temp2:(3,18)
param4:(4,10)
但是如果第三个改成(*this)++; 运行结果就变成:
param1:(4,5)
其他的值都没有了
tonywearme 2012-11-16
  • 打赏
  • 举报
回复
1. 没区别 2. 你改变的不是返回对象,而是拷贝了返回对象的temp,它不是常量。
Complex temp=param2.operator++(0);
temp.im+=9;
3. 没区别

64,683

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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