第6章 程序结构.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第六章 程序结构 16.1对象的作用域与可见性 作用域是指标识符的作用范围或有效范围,可见性是从对标识符引用的角度来谈的概念,若标识符在某处可见,则就可以在该处引用该标识符。这里所说的标识符主要是指变量名或者对象名。 16.1.1 对象的作用域 例子 #include iostream.h int id01=3; void main() { int id=5; { int id; id=7; cout id= id endl; //输出7 } cout id= id endl; //输出5 cout id01 endl; //输出3 } 1.函数原形的作用域 函数原形的作用域是指函数原型中标识符形参的作用范围,其作用域始于函数原形的左括号“(”,结束于函数原形声明的右括号“)”。 例如,设有下列原型声明: double Area(double radius); 等价形式: double Area(double); radius的作用域仅在函数的左右括号之间,不能用于程序正文其它地方,因而radius参数可有可无,省略它,也不会影响程序的编译效果,但是,考虑到可读性,还是在函数原形中给出形参说明比较好。 需要说明的是,这里函数原形的作用域是针对函数声明中的对象形参而言的,而不是指函数实现中的对象形参。 2.块作用域 块作用域是指在块中声明的标识符,其作用域自声明处起,一直到块结束为止。由于该作用域的范围具有局部性,所以有些文献也把它叫作局部作用域。 例如: #includeiostream.h void fun(int x) //x的作用域从此处开始 { int y=x; //y的作用域从此处开始 ciny; if (y0) { int z; //z的作用域从此处开始 z=x+y; } //z的作用域到此处结束 } //x和y的作用域到此处结束 这里,y和z都具有块作用域,并且是不同的块作用域。所谓块是指用一对花括号“{”和“}”括起来的一段程序。在本例中,函数体是一个块,if语句后的分支部分又是一个较小的块,二者是包含的关系。 3.类作用域 类的作用域是指类的声明中一对花括号所形成的作用范围,简称类域。每一个类都具有该类的类域,该类的成员局部于该类所属的类域中 在类作用域之外,对类成员的访问一般是不允许的,或者要受特殊的规则的限制(如使用友元函数)。 在C++中,由于类成员的特殊访问规则,使得类成员的作用域变得比较复杂。具体地讲,某个类A某个成员M在下情况下具有类A的作用域:该成员M出现在该类的某个成员函数中,并且该成员函数没有定义同名标识符。该类A的某个对象的该成员M的表达式中。例如,是A的对象,在表达式.M中在该类A的某个指向对象指针的该成员M的表达式中。例如,pt一个指向A类对象的指针,在表达式p-M中。在使用作用域符所限定的该成员中。例如,在表达式A::M中。类域不同于文件域,在类域中定义的变量不能使用autoregister和extern等修饰符,只能用static修饰符,而定义的函数也不能用extern修饰符。另外,在类域中的静态成员和成员函数还具有外部的连接属性。一般说来,类域介于文件域和域之间,由于类域问题比较复杂,只能根据具体问题具体分析。 一般来说,在文件开始所定义的全局标识符就具有全局作用域,从这个意义上说文件作用域也叫全局作用域。不同位置定义的同名标识符有不同的作用域,要注意区别。 16.1.2对象的可见性 可见性是从对标识符的引用的角度来谈的概念,如果标识符在某处可见,则表示在该处可以引用该标识符。作用域指的是标识符的有效范围,而可见性是分析在某个位置标识符的有效性。 在作用域中,文件作用域最大,接着依次是类作用域和块作用域,作用域的一般关系见图6.1所示。可见性表示从内层作用域向外层作用域“看”时能看见什么,可见性和作用域之间有着紧密的联系。 图6.1 作用域关系图 作用域可见性的一般如下: ·标识符应声明在先,引用在后。 ·在同一作用域中,不能声明同名的标识符。 ·如果某个标识符在外层中声明,且在内层中没有同一标识符的声明,则该标识符在内层可见。 ·对于两个嵌套的作用域,如果在内层作用域内声明了与外层作用域中同名的标识符,则外层作用域的标识符在内层不可见。 例6.1 作用域与可见性示例。 #includeiostream using namespace std; int x; //定义全局变量,具有文件作用域 void main() { x=3; //给文件作用域的变量赋初值3 { int x; //子块中定义局部变

文档评论(0)

82393aa + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档