class Point
{
private:
int x;
int y;
public:
Point()
{
x=0;
y=0;
}
Point(int a,int b)
{
x=a;
y=b;
}
~Point()
{
}
void print()
{
cout<<x<<endl<<y<<endl;
}
void print(int x,int y)
{
x=x; // 这里的x和y难道不是Point类中的x和y??
y=y; //如果不是的话,那么printf()函数中的cout<<x<<endl<<y<<endl;中的x和y为什么会输出?
//cout<<x<<endl<<y<<endl;
}
};
void main()
{
Point a(3,3);
a.print(2,2);
a.print(); //这里为什么没有输出2 2???
//cout<<a.x<<endl<<a.y<<endl;
}
12 个解决方案
#1
楼主用的VC6吗,这是VC6的一个小bug~~~
void print(int x,int y)
{
this->x=x; // 这里的x和y难道不是Point类中的x和y??
this->y=y; //如果不是的话,那么printf()函数中的cout<<x<<endl<<y<<endl;中的x和y为什么会输出?
//cout<<x<<endl<<y<<endl;
}
这样就好了。
珍惜生命,远离VC6
void print(int x,int y)
{
this->x=x; // 这里的x和y难道不是Point类中的x和y??
this->y=y; //如果不是的话,那么printf()函数中的cout<<x<<endl<<y<<endl;中的x和y为什么会输出?
//cout<<x<<endl<<y<<endl;
}
这样就好了。
珍惜生命,远离VC6
#2
很显然,
void print(int x,int y)
{
x=x;
y=y;
//cout<<x<<endl<<y<<endl;
}
这里的x和y, 都是print的参数x和y。
void print(int x,int y)
{
x=x;
y=y;
//cout<<x<<endl<<y<<endl;
}
这里的x和y, 都是print的参数x和y。
#3
全局变量和局部变量,同名的时候,全局变量被隐藏。
这个也是一样。
这个也是一样。
#4
成员函数中的名称解析顺序是如下这样的:先找局部域,然后找类域,最后外部域直到全局域。
print的局部域里面已经存在x和y的名称了,当然先解析为print的两个形参。
#5
2L正解 变量名重复时 需要加this指针 指明左值为成员变量。
#6
感觉这个不算BUG吧,楼主那个写法本来就是操作的函数局部变量中的X,Y???
#7
不是说单目作用域运算符::可以访问外层程序块中的全局变量嘛
我用改为:
::x=x;
::y=y;
之后为什么还不行?
#8
学习了·····
#9
::前面加个point看下
#10
void print(int x,int y)
{
x=x; // 这里的x和y难道不是Point类中的x和y??
y=y; //如果不是的话,那么printf()函数中的cout<<x<<endl<<y<<endl;中的x和y为什么会输出?
//cout<<x<<endl<<y<<endl;
}
是这样的 你这个方法的形参是x,y但是你里面保存的变量也是x,y 这样相当于重复声明了变量
这是时候编译器自动认为 这个{}里面的x,y 但是指形参的x,y
这个x = x这个意思就是形参的x = 形参的x 但是我们想要的是外面的x
这个时候就前面加上个this. 意思是这个类的
this.x就是这个类的x 就可以完成楼主的要求了
#11
[Quote=引用 3 楼 jixingzhong 的回复:]
全局变量和局部变量,同名的时候,全局变量被隐藏。
这个也是一样。
Quote]当有局部变量的时候,在此代码作用域内,把全局变量覆盖。。。[/
全局变量和局部变量,同名的时候,全局变量被隐藏。
这个也是一样。
Quote]当有局部变量的时候,在此代码作用域内,把全局变量覆盖。。。[/
#12
也不行
#1
楼主用的VC6吗,这是VC6的一个小bug~~~
void print(int x,int y)
{
this->x=x; // 这里的x和y难道不是Point类中的x和y??
this->y=y; //如果不是的话,那么printf()函数中的cout<<x<<endl<<y<<endl;中的x和y为什么会输出?
//cout<<x<<endl<<y<<endl;
}
这样就好了。
珍惜生命,远离VC6
void print(int x,int y)
{
this->x=x; // 这里的x和y难道不是Point类中的x和y??
this->y=y; //如果不是的话,那么printf()函数中的cout<<x<<endl<<y<<endl;中的x和y为什么会输出?
//cout<<x<<endl<<y<<endl;
}
这样就好了。
珍惜生命,远离VC6
#2
很显然,
void print(int x,int y)
{
x=x;
y=y;
//cout<<x<<endl<<y<<endl;
}
这里的x和y, 都是print的参数x和y。
void print(int x,int y)
{
x=x;
y=y;
//cout<<x<<endl<<y<<endl;
}
这里的x和y, 都是print的参数x和y。
#3
全局变量和局部变量,同名的时候,全局变量被隐藏。
这个也是一样。
这个也是一样。
#4
成员函数中的名称解析顺序是如下这样的:先找局部域,然后找类域,最后外部域直到全局域。
print的局部域里面已经存在x和y的名称了,当然先解析为print的两个形参。
#5
2L正解 变量名重复时 需要加this指针 指明左值为成员变量。
#6
感觉这个不算BUG吧,楼主那个写法本来就是操作的函数局部变量中的X,Y???
#7
不是说单目作用域运算符::可以访问外层程序块中的全局变量嘛
我用改为:
::x=x;
::y=y;
之后为什么还不行?
#8
学习了·····
#9
::前面加个point看下
#10
void print(int x,int y)
{
x=x; // 这里的x和y难道不是Point类中的x和y??
y=y; //如果不是的话,那么printf()函数中的cout<<x<<endl<<y<<endl;中的x和y为什么会输出?
//cout<<x<<endl<<y<<endl;
}
是这样的 你这个方法的形参是x,y但是你里面保存的变量也是x,y 这样相当于重复声明了变量
这是时候编译器自动认为 这个{}里面的x,y 但是指形参的x,y
这个x = x这个意思就是形参的x = 形参的x 但是我们想要的是外面的x
这个时候就前面加上个this. 意思是这个类的
this.x就是这个类的x 就可以完成楼主的要求了
#11
[Quote=引用 3 楼 jixingzhong 的回复:]
全局变量和局部变量,同名的时候,全局变量被隐藏。
这个也是一样。
Quote]当有局部变量的时候,在此代码作用域内,把全局变量覆盖。。。[/
全局变量和局部变量,同名的时候,全局变量被隐藏。
这个也是一样。
Quote]当有局部变量的时候,在此代码作用域内,把全局变量覆盖。。。[/
#12
也不行