运算符重载的一例

didiwuwo 2002-11-08 03:04:57
thinking in c++上的一例:
#include <iostream>
using namespace std;

class Integer {
int i;
public:
Integer(int ii):i(ii) { }
const Integer operator+(const Integer& rv) const{
cout<<"operator+"<<endl;
return Integer(i+rv.i);
}
Integer& operator+=(const Integer& rv) {
cout<<"operator+="<<endl;
i+=rv.i;
return *this ;
}
void print() {
cout<<"i="<<i<<endl;
}
};

void main() {
cout<<"built-in types:"<<endl;
int i=1,j=2,k=3;
k+=i+j;
cout<<"user-defined types:"<<endl;
Integer ii(1),jj(2),kk(3);
kk+=ii+jj;
kk.print();
}
在下弄不明白const Integer operator+(const Integer& rv) const???
居然有三个const,我全去了再run一样通过,如果第一个是说重载的+=函数不会修改
参数,第二个const是说参数rv是个const,不可以被修改.那第三个const的用意呢?
还有return *this ?我知道这个意思是相当于返回i的值可就不明白this的指向?
请多指教,谢谢!!!
...全文
18 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
rwy1882 2002-11-08
  • 打赏
  • 举报
回复
不要跳着看thinking in c+
rwy1882 2002-11-08
  • 打赏
  • 举报
回复
第一个const表示这个operator+函数的返回值是不可以修改的
第二个const不可修改所指对象的值的引用
第3个const不改变函数里的植
第7章你没看?
*this本对象地引用
zxm954712 2002-11-08
  • 打赏
  • 举报
回复
1.第一个const表示这个operator+函数的返回值是不可以修改的,即表示用这个操作符的对象不能被修改。第三个const表示这个operator+成员函数不能修改这个类里数据成员的值。第二个你说了。
2.this指向的是使用这个操作符+=的对象,即kk,当然要返回*this了。呵呵
SHIZUMARU 2002-11-08
  • 打赏
  • 举报
回复
从左向右:

第一个const:返回的是一个“不可修改其值”的Integer。修饰的是返回值。

第二个const:参数是一个“不可修改所指对象的值”的Integer型引用。修饰的是参数。

第三个const:该函数“不可修改类成员变量的值”。修饰的是整个函数。

const是在non-const上加上了更多的限制,直接去掉当然能正常运行啦。

this指针永远指向“本对象”。例如:

Integer i;

上述语句生成一个Integer型的对象i,i的this指针(i.this)就指向i的地址,即i.this==&i

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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