大家帮我看看这个,为什么?

zqj50 2010-07-11 10:17:41
#include<iostream.h>

class Point
{
public:
int x;
int y;

Point()
{
x=0;
y=0;
}
Point(int a,int b)
{
x=a;
y=b;
}
~Point(){}
void output()
{
cout<<x<<endl<<y<<endl;
}
void output(int x,int y)
{
x=x;
y=y;
}

};
int main()
{
Point pt(3,3);
pt.output(5,5);
pt.output();

}

为什么结果输出是3 3而不是5 5;
而把红色字体里的x和y改成a和b就可以了呢?
谁来回答下吧,谢谢大家了....
...全文
110 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
peijicheng 2010-07-14
  • 打赏
  • 举报
回复
变量作用域的问题!
void output(int x,int y)
{
x=x;
y=y;
}
此处的左值X和右值X都是参数中的X
y同理
局部变量覆盖了全局变量
djjlove_2008 2010-07-12
  • 打赏
  • 举报
回复
楼主要注意结帖哦。
turmary 2010-07-12
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 aizibion 的回复:]
void output(int x,int y)
{
this->x=x;
this->y=y;
}
[/Quote]

路过
zhangyafei13 2010-07-12
  • 打赏
  • 举报
回复
djjlove_2008 2010-07-12
  • 打赏
  • 举报
回复
相同的变量赋值怎么行了?编译器有时太死板,没人这么聪明,所以我们写程序要让编译器满足。
解决办法也只有
void output(int x,int y)
{
this->x=x;
this->y=y;
}
或者
把x,y改成a,b不与类变量同名了。
myupub 2010-07-12
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 forestdb 的回复:]
有个概念叫scope和visibility,LZ去了解下。
[/Quote]


没看清楚,搞反了


应该是编译器认为
void output(int x,int y)
{
x=x;
y=y;
}
函数里的x,y均为成员变量,而不是参数里的x,y
所以就算里传进了5也没有用

建议,参数最好不要和成员变量同名
myupub 2010-07-12
  • 打赏
  • 举报
回复
void output(int x,int y)
{
x=x;
y=y;
}

编译器认为=号左边的x是成员变量里的那个x,而右边的x是参数里的x
同样,编译器认为=号左边的x是成员变量里的那个y,而右边的x是参数里的y
这样一来,
int main()
{
Point pt(3,3);
pt.output(5,5);
pt.output();

}
Point pt(3,3);把成员变量x和y改成了3
pt.output(5,5);就会把成员变量x和y改成了5了

建议,参数最好不要和成员变量同名
ForestDB 2010-07-11
  • 打赏
  • 举报
回复
有个概念叫scope和visibility,LZ去了解下。
liutengfeigo 2010-07-11
  • 打赏
  • 举报
回复
注意一下就好了。
yuhuaijun 2010-07-11
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 aizibion 的回复:]

引用 1 楼 aizibion 的回复:
void output(int x,int y)
{
this->x=x;
this->y=y;
}

参数覆盖了类成员,除非指定,局部变量同理
[/Quote]
将output的参数改为(const int x, const int y)就知道啦, 此时x, y 不是类的数据成员
aizibion 2010-07-11
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 aizibion 的回复:]
void output(int x,int y)
{
this->x=x;
this->y=y;
}
[/Quote]
参数覆盖了类成员,除非指定,局部变量同理
zqj50 2010-07-11
  • 打赏
  • 举报
回复
谢谢ls 的,不过我知道要这么改,但是我要知道的是为什么现在那句不行,谢谢
aizibion 2010-07-11
  • 打赏
  • 举报
回复
void output(int x,int y)
{
this->x=x;
this->y=y;

}

64,651

社区成员

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

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