- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C程序的结构概要
第9章 C++程序的结构 教学内容 9.1 作用域与可见性 9.2生存期 9.3全局变量与局部变量 9.4静态成员与友员 9.5共用数据的保护 9.6多文件结构与编译预处理 9.1 作用域与可见性—作用域 1.函数原型作用域 函数原型作用域是C++中最小的作用域,是指在函数原型声明时形 式参数的作用范围。例如,假设有如下函数声明: double Area(double radius); 我们可以看到,标识符radius的作用(或称有效)范围就在函数 Area的左、右括号之间,在程序的其他地方无法引用这个标识符,我 们称标识符radius的作用域是函数原型作用域。对于这种情况,标识 符radius实际上是可有可无的,省去它也决不会影响到程序的编译和 运行结果。但是,考虑程序的可读性,还是要给函数原型声明的形参 一个容易理解和记忆的名称。 9.1 作用域与可见性—作用域 2.块作用域 我们来看一个例子: 9.1 作用域与可见性—作用域 3.类作用域 在讨论类作用域时,我们可以把类看成是一组有名成员的集合,除 了个别情况外,类作用域作用于特定的成员名。类X的成员M在下列情 况下局限于X,或者说具有类作用域:在X的成员函数内出现了标识符 M,同时在该函数中也没有声明同名的局部作用域标识符。一个简单的 例子是,M是类X的数据成员,在X的任何一个没有重新声明一个变量M 的成员函数中都可以访问到M,也就是说M在这样的函数中都起作用, 这样的M就具有类作用域。实际上,在定义的类中,成员函数访问的大 多数普通数据成员都是这种情况。类的封装作用也就是限制数据的作用 域。 在x.M或者x∷M的表达式中,类X的对象x通过作用符号“.”或“∷”访问 的M也具有类作用域,这正是程序访问对象成员的最基本方法。 9.1 作用域与可见性—作用域 4.文件作用域 不在前述各个作用域中出现的声明,就具有文件作用域,这样声 明的标识符的作用域开始于声明点,结束于文件尾。一般情况下, 类似【例9-1】所声明的全局变量就具有文件 作用域,在整个文件中都有效。【例9-1】 作用域实例。 9.1 作用域与可见性—可见性 程序运行到某一点,能够引用到的标识符,就是该处可见的标识 符。可见性表示从内层作用域向外层作用域“看”时能看到什么。因 此,可见性和作用域之间有着密切的关系,图描述了作用域的一般 关系。 9.2 生存期—静态生存期 对象的生存期可以分为静态生存期和动态生存期两种。 如果对象的生存期与程序的运行期相同,我们称它具有静态生存 期。在文件作用域中声明的对象具有这样的静态生存期。在函数内 部的块作用域中要声明具有静态生存期的对象,则要使用static关键 字。 9.2 生存期—动态生存期 除了上节中的两种情况,其余的对象都具有动态生存期。块作用 域中声明的具有动态生存期的对象也习惯性地称为局部生存期对象。 动态生存期对象开始于声明点,结束于该标识符作用域结束处。 【例9-2】 具有静态、动态生存期对象的时钟程序。 9.3 全局变量与局部变量 1.程序的内存区域 并不是所有的变量时刻都是可见的。一些变量在整个程序中都是 可见的,它们称为全局变量;一些变量只能在一个函数中可见,称 为局部变量。要了解变量的这些属性,应先弄清程序在内存中的分 布区域,如图所示。 9.3 全局变量与局部变量 2.全局变量 在函数外边访问的变量被认为是全局变量,并在程序的每个函数 中是可见的。全局变量存放在内存的全局数据区。全局变量由编译 器建立,并且初始化为0,在定义全局变量时,进行专门初始化的除 外。例如,下面的代码定义并使用了全局变量n: 9.3 全局变量与局部变量 3.局部变量 在函数内部定义的变量仅在该函数内是可见的。另外,局部变量 的类型修饰是auto,表示该变量在栈中分配空间,但习惯上都省略 auto。例如: 9.4 静态成员与友员—静态成员 1.静态数据成员 静态数据成员是一种特殊的数据成员,它以关键字static开头。 例如: 9.4 静态成员与友员—静态成员 2.静态成员函数 成员函数也可以定义为静态的,在类中声明函数的前面加static关 键字就成了静态成员函数。例如: static int volume(); 和静态数据成员一样,静态成员函数是类的一部分,而不是对象 的一部分。如果要在类外调用公有的静态成
文档评论(0)