C++ 重载基础问题 求助

tangxianghenggood 2010-10-25 10:47:44
刚研究了一下重载,具体是二元重载,代码如下
#include <iostream>
using namespace std;

class one
{
private:
int x;
int y;
public:
one(int i=10,int j=20):x(i),y(j){}; one operator+(one k);
void dispaly();
};

one one::operator +(one k)
{
return one(x+y);
}
void one::dispaly()
{
cout<<"x+y="<<x+y<<endl;
}
int main()
{
one c1(1,2),c2(3,3),c3;
c3= c1+c2 ; c1.dispaly();
c2.dispaly();
c3.dispaly();

system("pause");
return 0;
}


c3=c1+c2 红色部分输出为 23,也就是C1(1,2)的和被当成了x,而y是类初始化y=20作为了C2的值,这没有实现想要的结果啊,这是为什么呢?在网上找了一下,没有了解到具体是为什么!
路过的各位朋友,可以给解释一下不? 说说重载的实现过程? 先谢谢了!
...全文
109 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
we_sky2008 2010-10-25
  • 打赏
  • 举报
回复

one one::operator +(one k)
{
return one(x + y);//这里,左侧对象的x和y的和来初始化构造函数one(int i=10, int j=20的形参i, 而形参j取缺省值20,所以operator+返回的对象就不是你想要的了;
}
we_sky2008 2010-10-25
  • 打赏
  • 举报
回复

#include <iostream>
using namespace std;

class one
{
private:
int x;
int y;
public:
one(int i=10, int j=20):x(i),y(j){}
one operator+(const one &k);
void dispaly();
};

one one::operator +(const one &k)
{
return one(x + k.x, y + k.y);//这里, 这样改是你要的结果吗?
}

void one::dispaly()
{
cout<<"x + y = "<<x+y<<endl;
}

int main()
{
one c1(1, 2), c2(3, 3), c3;
c3 = c1 + c2 ;

c1.dispaly();
c2.dispaly();
c3.dispaly();

system("pause");
return 0;
}
zhanghengsdnu 2010-10-25
  • 打赏
  • 举报
回复
重载还能用默认值吗?
zhanghengsdnu 2010-10-25
  • 打赏
  • 举报
回复
+ 不是二元的吗?那里体现的二元?
zhanghengsdnu 2010-10-25
  • 打赏
  • 举报
回复
one one::operator +(one k)
{
return one(x+y);
}

???
chainyu 2010-10-25
  • 打赏
  • 举报
回复
重载下=操作符
ocean1004 2010-10-25
  • 打赏
  • 举报
回复
重载有问题
liutengfeigo 2010-10-25
  • 打赏
  • 举报
回复
return one(x+y);//这里~!~
Near2009011264 2010-10-25
  • 打赏
  • 举报
回复

one one::operator +(one k)
{
return one(x+y); // x+y等价于this->x +this->y 和K没关系
}

c1+c2 其实就是c1.operetor+(c2) 返回的其实是one(c1.x+c1.y) one的构造函数是one(int x = 10, int y = 20)
所以返回的就是one(3, 20)
c3 = c1+c2 是一个拷贝构造的过程 所以c3.x = 3 c3.y = 20

如果你想实现+k的话
应该是return(x+k.x, y+k.y)

fengyuananan 2010-10-25
  • 打赏
  • 举报
回复
代码没太懂,学习,帮lz顶。。。

64,631

社区成员

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

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