欢迎来到天天文库
浏览记录
ID:39305519
大小:549.60 KB
页数:72页
时间:2019-06-30
《C++语言程序设计清华大学郑莉》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第五章C++程序的结构清华大学郑莉C++语言程序设计2本章主要内容作用域与可见性对象的生存期数据与函数静态成员共享数据的保护友元编译预处理命令多文件结构和工程深度探索5.1标识符的作用域和可见性作用域是一个标识符在程序正文中有效的区域。可见性标识符是否可以引用的问题34函数原形的作用域函数原型中的参数,其作用域始于"(",结束于")"。例如,设有下列原型声明:doublearea(doubleradius);radius的作用域仅在于此,不能用于程序正文其他地方,因而可有可无。作用域与可见性5局部作用域函数的形参,在块中声明的标识符,其作用域自声明
2、处起,限于块中,例如:voidfun(inta){intb=a;cin>>b;if(b>0){intc;......}}c的作用域b的作用域作用域与可见性a的作用域6类作用域类作用域作用于特定的成员名。类X的成员m具有类作用域,对m的访问方式如下:如果在X的成员函数中没有声明同名的局部作用域标识符,那么在该函数内可以访问成员m。通过表达式x.m或者X::m访问。通过表达式ptr->M作用域与可见性7命名空间命名空间可以解决类名、函数名等的命名冲突命名空间的声明namespace命名空间名{各种声明(函数声明、类声明、……)}例namespaceSo
3、meNs{classSomeClass{...};}特殊的命名空间全局命名空间:默认的命名空间匿名命名空间:对每个源文件是唯一的作用域与可见性命名空间作用域一个命名空间确定了一个命名空间作用域引用其它命名空间作用域中的标识符命名空间名::标识符名例:声明一个SomeClass型的对象SomeNs::SomeClassobj1;将其它命名空间作用域的标识符暴露于当前作用域对指定标识符using命名空间名::标识符名;对所有标识符usingnamespace命名空间名;8作用域与可见性9可见性可见性是从对标识符的引用的角度来谈的概念可见性表示从内层作用
4、域向外层作用域“看”时能看见什么。如果标识在某处可见,则就可以在该处引用此标识符。块作用域类作用域命名空间作用域作用域与可见性10可见性标识符应声明在先,引用在后。如果某个标识符在外层中声明,且在内层中没有同一标识符的声明,则该标识符在内层可见。对于两个嵌套的作用域,如果在内层作用域内声明了与外层作用域中同名的标识符,则外层作用域的标识符在内层不可见。作用域与可见性11同一作用域中的同名标识符在同一作用域内的对象名、函数名、枚举常量名会隐藏同名的类名或枚举类型名。重载的函数可以有相同的函数名。作用域与可见性12#includeu
5、singnamespacestd;inti;//在全局命名空间中的全局变量namespaceNs{intj;//在Ns命名空间中的全局变量}intmain(){i=5;//为全局变量i赋值Ns::j=6;//为全局变量j赋值{//子块1usingnamespaceNs;//当前块中可以直接引用Ns中的标识符inti;//局部变量,局部作用域i=7;cout<<"i="<
6、存期对象从产生到结束的这段时间就是它的生存期。在对象生存期内,对象将保持它的值,直到被更新为止。14静态生存期这种生存期与程序的运行期相同。在文件作用域中声明的对象具有这种生存期。在函数内部声明静态生存期对象,要冠以关键字static。对象的生存期15#includeusingnamespacestd;inti=5;//文件作用域intmain(){staticintk=3;//局部作用域cout<<"i="<7、存期局部作用域中声明的,没有用static修饰的对象是动态生存期的对象(习惯称局部生存期对象)。开始于程序执行到声明点时,结束于命名该标识符的作用域结束处。对象的生存期17例5-2变量的生存期与可见性#includeusingnamespacestd;inti=1;//i为全局变量,具有静态生存期。voidother(){staticinta=2;staticintb;//a,b为静态局部变量,具有全局寿命,局部可见。//只第一次进入函数时被初始化。intc=10;//C为局部变量,具有动态生存期,//每次进入函数时都初始化。a8、+=2;i+=32;c+=5;cout<<"---OTHER---";cout<<"i:"<
7、存期局部作用域中声明的,没有用static修饰的对象是动态生存期的对象(习惯称局部生存期对象)。开始于程序执行到声明点时,结束于命名该标识符的作用域结束处。对象的生存期17例5-2变量的生存期与可见性#includeusingnamespacestd;inti=1;//i为全局变量,具有静态生存期。voidother(){staticinta=2;staticintb;//a,b为静态局部变量,具有全局寿命,局部可见。//只第一次进入函数时被初始化。intc=10;//C为局部变量,具有动态生存期,//每次进入函数时都初始化。a
8、+=2;i+=32;c+=5;cout<<"---OTHER---";cout<<"i:"<
此文档下载收益归作者所有