作用域与可见性
函数原型的作用域
函数原型中的参数,其作用域是与“(”,结束于“)”。
如,设有下列原型声明
double Area(double radius);
//Area就叫原型,radius 的作用域仅在于此,不能用于程序正文其他地方,因而可有可无
//作用分为太小了,只在参数声明的括号内起作用,所以可以直接写double Area (double)
块作用域
在块中声明标识符,其作用域声明初起,限于块中,作用范围只局限在“{”“}”之内
如:
- void fun(int a)
- { /**b的作用域**/
- int b(a);
- cin >>b;
- if(b>0)
- { /**C的作用域***/
- int c;
- …..
- }
- }
类和文件作用域
- void fun(int a)
- { /**b的作用域**/
- int b(a);
- cin >>b;
- if(b>0)
- { /**C的作用域***/
- int c;
- …..
- }
- }
类作用与作用与特定的成员名,类机器对象有特殊的访问和作用域规则,作用范围就是局限于类里面
不再前述各个作用域中出现的声明,具有文件作用域,这样声明的标识符的作用域开始于声明点,结束语文件尾。
可见性
可见性是从对标识符的引用的角度来谈的概念
可见性表示从内层作用域向外层作用域“看”时能看见什么
如果标识在某处可见,则就可以在该处引用此标志符
标识符应声明在先,引用在后。
在同一个作用域中,不能声明同名的标识符。
如果某个标识符在外层声明,且在内层中没有同一标识符的声明,则该标识符在内层可见。
对于2个套嵌作用域,如果在内层作用域内声明了外层作用域中同名的标识符,则外层作用域的标识符在内层不可见。这个叫做 屏蔽
例:
- #include <iostream.h>
- int i;//文件作用域
- int main()
- {
- i=5;
- {int i;//块作用域 i只作用于{}之内的
- i=7;
- cout <<””i=”<<i<<endl; 输出7
- }
- cout <<”i=”<<i;//输出5
- return 0;
- }