问一点点关于VC的面向对象的货色

问一点点关于VC的面向对象的东西。
问一点关于VC 面向对象的东西

今天看了一上关于VC的OOP相关的资料。发现一个很奇怪的问题。
如下面的代码。

#include <iostream.h>
class Sx
{
public:
int x ;
void fun1(int x)
{
//this->x = a;
this->x = x;
}
void fun2()
{
cout << this->x<<endl;
}
};

void main()
{
Sx sx;
sx.fun1(5);
sx.fun2();
}



在类里面的第一个成员函数中。fun1中 



//如果将fun1中的参数int x 更换在 int a下面的代码就是成立的。
//x = a;
//反之为什么下面这种的就不能呢。
//x = x;
//而这种就能,这一个我能理解。为什么上面的哪个表达式不行。
this->x = x;




各位大神指点一下。

------解决方案--------------------
因为参数int x 与类成员变量 int x 名字冲突,所以在函数中使用 x = x 两个x 都表示参数中的x,而this->x才表示类中成员,这是作用域的问题。
为什么SDK的函数签名会有时候要加上:: 也是作用域的问题
------解决方案--------------------
同名变量,作用域大的会被作用域小的隐藏,即该名称只能和作用域小的那个变量关联
------解决方案--------------------
注意 作用域
------解决方案--------------------
x=x的话,如何区分哪个x是类成员变量,哪个x是fun1()的形参?