关于重载运算符,请解释一下main函数中的第二行

谁学逆向工程 2009-11-02 09:16:36
#include "iostream"
using namespace std;
class counter
{
public:
counter(){itsval=0;}
counter(int initialvalue){itsval =initialvalue;}
int getitsval()const {return itsval;}
void setitsval (int x){itsval=x;}
counter operator + ( counter & rhs) {return counter(itsval + rhs.getitsval());}
private:
int itsval;
};
void main()
{
counter valone(2),valtwo(4),valthree;
valthree=valone +valtwo;
cout<<"valone "<<valone.getitsval ()<<endl;
cout<<"valtwo "<<valtwo.getitsval ()<<endl;
cout<<"valthree "<<valthree.getitsval ()<<endl;
}
...全文
678 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
limaolinghu 2009-11-03
  • 打赏
  • 举报
回复
我觉得这么写没什么问题啊
+之后返回的也是一个临时变量的拷贝
pady_pady 2009-11-03
  • 打赏
  • 举报
回复
如果没有重载+=
一般需要声明为友元
pady_pady 2009-11-03
  • 打赏
  • 举报
回复
c++里面通常对+,-,*,/的重载,要先重载+=...举个例子:


counter operator + ( counter & rhs)
{
counter temp = *this;
temp += rhs;
return temp;
}
counter& operator += ( counter & rhs)
{
itsval += rhs.itsval;
return *this;
}

zhangm00 2009-11-03
  • 打赏
  • 举报
回复
"+"是友元函数,不是成员函数。
CyberLogix 2009-11-03
  • 打赏
  • 举报
回复
翻了常见的错误,运算符+,<<,>>等二元符一般不能弄成成员函数,
vcgaoshou 2009-11-03
  • 打赏
  • 举报
回复
是valtwo
谁学逆向工程 2009-11-03
  • 打赏
  • 举报
回复
operator函数踢里的 itsval 怎么看出来是 valone的呢?
herman~~ 2009-11-02
  • 打赏
  • 举报
回复
UP
谁学逆向工程 2009-11-02
  • 打赏
  • 举报
回复
各位先睡觉,明天在研究
谁学逆向工程 2009-11-02
  • 打赏
  • 举报
回复
目前还没学友元的概念
zgjxwl 2009-11-02
  • 打赏
  • 举报
回复
#include <iostream>
using namespace std;
class counter
{
public:
counter()
{
itsval=0;
}
counter(int initialvalue)
{
itsval = initialvalue;
}
int getitsval()const
{
return itsval;
}
void setitsval (int x)
{
itsval=x;
}
friend counter operator+(const counter & lhs, const counter & rhs)
{
return counter( lhs.getitsval() + rhs.getitsval() );
}
private:
int itsval;
};
void main()
{
counter valone(2),valtwo(4),valthree;
valthree = valone + valtwo;
cout <<"valone " <<valone.getitsval () <<endl;
cout <<"valtwo " <<valtwo.getitsval () <<endl;
cout <<"valthree " <<valthree.getitsval () <<endl;
}


就是说要你写成友元。。。不然你最后把valone和valtwo相加后又存在了valone里了。。。
这不是+的语义。。。
谁学逆向工程 2009-11-02
  • 打赏
  • 举报
回复
迷糊了
zgjxwl 2009-11-02
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 xiaoyuanyuan2009 的回复:]
operator函数中的rhs,在这里是 valone 还是 valtwo
[/Quote]
counter operator + ( counter & rhs) {return counter(itsval + rhs.getitsval());}

itsval是*this的。其实也就是后面的valone 的。rhs.getitsval())得到的是后面valtwo的。
adventurelw 2009-11-02
  • 打赏
  • 举报
回复
当作为成员函数时
*this默认作为函数的第一个参数。
谁学逆向工程 2009-11-02
  • 打赏
  • 举报
回复
谁作为默认参数
adventurelw 2009-11-02
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 xiaoyuanyuan2009 的回复:]
operator函数中的rhs,在这里是 valone 还是 valtwo
[/Quote]
valtwo
green198732 2009-11-02
  • 打赏
  • 举报
回复
正确的啊 ,第一个作为默认参数。。
没什么解释的啊。。。
谁学逆向工程 2009-11-02
  • 打赏
  • 举报
回复
valtwo 经过operator函数之后,应该是 4+4=8呀
pady_pady 2009-11-02
  • 打赏
  • 举报
回复
valtwo
谁学逆向工程 2009-11-02
  • 打赏
  • 举报
回复
operator函数中的rhs,在这里是 valone 还是 valtwo
加载更多回复(4)

64,662

社区成员

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

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