我读不懂这句话...

来源:百度知道 编辑:UC知道 时间:2024/05/30 04:01:30
类的成员函数无论是内联的还是在类外单独定义的,其函数名都具有类作用域.与块作用域一样,类作用域中的标识符将屏蔽包含该类作用域之作用域中的同名标识符.比如:

class X{
int xl
public:
int fun();
};

int x;
int fun(); //全局函数fun()的说明
intX::fun()
{
::x++; //全局变量X
return x; //类成员x
}

我就是读不懂:
"类作用域中的标识符将屏蔽包含该类作用域之作用域中的同名标识符"
什么叫"作用域之作用域中"???
以及结合这个例子怎么明白这句话?

“类作用域中的标识符将屏蔽包含该类作用域之作用域中的同名标识符”这句话有点绕口,把这个表述具体化一下可能更容易理解。
例如:
类作用域为A
A中有一个标识符X
另外还有一个作用域B,它包含作用域A
而B中也有一个标识符X
这时,A中的X将屏蔽B中的X
即:类作用域(A)中的标识符(X)将屏蔽包含该类作用域(A)之作用域(B)中的同名标识符(X)

其实这是任何程序语言最基本的概念之一。例如
for (int i = 0;i<10; i++ ) {
for (int i = 0;i<5; i++ ) {
printf("i=%d\n", i);
}
}
所打印的i只能是内层循环的i,因为外层的i被屏蔽了。

我个人理解:
针对你的例子
int x;
int fun(); //全局函数fun()的说明
intX::fun()
{
::x++; //全局变量X
return x; //类成员x
}

fun()函数的作用域就从定义"全局函数fun()的说明"的地方开始,往下同一文件都是。

"屏蔽包含该类作用域之作用域中的同名标识符"
就是这个作用域下面出现的fun()指的都是你一开始定义的那个fun(),其他fun() (作用域内的同名函数)不会使用,调用你定义的fun()。

PS:可以看看谈浩强的C书,有专门介绍的!