- 1、本文档共26页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C__课件——c5_习题课
* * * * * * * * * * * * * * * * * C++语言程序设计 清华大学 郑莉 第五章 C++程序的结构 C++语言程序设计 * 重点主要内容 作用域与可见性 对象的生存期 静态成员 友元 作用域 作用域讨论的是标识符的有效范围,是一个标识符在程序中有效的区域。 函数原形作用域 局部作用域(块作用域) 类作用域 全局作用域 * * 函数原形的作用域 函数原型中的参数,其作用域始于(,结束于)。 例如,设有下列原型声明: double area(double radius); radius 的作用域仅在于此,不能用于程序正文其他地方,因而可有可无。 作用域与可见性 * 局部作用域 函数的形参,在块中声明的标识符,其作用域自声明处起,限于块中,例如: void fun(int a) { int b = a; cin b; if (b 0) { int c; ...... } } c的作用域 b的作用域 作用域与可见性 a的作用域 * 类作用域 类作用域作用于特定的成员名。 类X的成员m具有类作用域,对m的访问方式如下: 如果在X的成员函数中没有声明同名的局部作用域标识符,那么在该函数内可以访问成员m。 通过表达式x.m或者X::m访问。 通过表达式ptr-m 作用域与可见性 命名空间作用域 命名空间是表达多个变量和多个函数组合成一个组的方法。 主要是为了解决名字(用户定义的类型名、变量名、函数名)冲突的问题。 一个命名空间确定了一个命名空间作用域 引用其它命名空间作用域中的标识符 命名空间名::标识符名 例:声明一个SomeClass型的对象 SomeNs::SomeClass obj1; * 作用域与可见性 命名空间作用域 将其它命名空间作用域的标识符暴露于当前作用域 对指定标识符 using 命名空间名::标识符名; 对所有标识符 using namespace命名空间名; 全局命名空间 匿名命名空间 * 作用域与可见性 * 可见性 可见性是标识符是否可以引用的性能。 块作用域 类作用域 命名空间作用域 作用域与可见性 * 可见性一般规则 标识符应声明在先,引用在后。 在同一作用域内不能声明同名的标识符,但重载的函数可以有相同的函数名。 对于不同作用域声明的标识符,遵循的原则: 若有两个或多个具有包含关系的作用域,外层声明的标识符如果在内层没有声明同名标识符时仍可见,如果内层声明了同名的标识符则外层标识符不可见 作用域与可见性 * 对象的生存期 对象从产生到结束的这段时间就是它的生存期。在对象生存期内,对象将保持它的值,直到被更新为止。 分类: 动态生存期 静态生存期 * 动态生存期 块作用域中声明的对象是动态生存期的对象(习惯称局部生存期对象)。 开始于程序执行到声明点时,结束于命名该标识符的作用域结束处。 对象的生存期 * 静态生存期 这种生存期与程序的运行期相同。 在命名空间作用域中声明的对象具有这种生存期。 在函数内部声明静态生存期对象,要冠以关键字static 。 对象的生存期 静态局部变量特点 不会随着每次函数的调用而产生一个副本,也不会随着函数的返回而失效。 定义时未指定初值的基本类型静态生存期变量会被以0值初始化。 存放于静态数据存储区,全局可见,但是作用域是局部作用域,超出作用域后变量仍然存在。 * * 静态成员 分类 静态数据成员 静态成员函数 采用static关键字声明 属于类的静态成员,不是对象的成员 解决了同一个类的不同对象之间的数据和函数共享问题 静态成员 * 静态数据成员 是类数据成员的一种特例,用关键字static声明。具有静态生存期 每个类中只有一个拷贝副本,所有对象共同维护和使用 描述所有对象的共同特征,对任何对象实例,属性值相同,实现不同对象之间的数据共享 类定义中仅仅对静态数据成员进行引用性声明 必须在类外定义和初始化,用(::)来指明所属的类。 静态成员 * 静态函数成员 使用static声明的函数成员,属于整个类,同一个类的所有对象共同维护及共享。 类外代码可以通过类名和对象名两种方式调用 静态成员函数可以直接访问该类的静态数据和函数成员。 必须通过对象名访问非静态成员 静态成员 问题提出 类具有封装和信息隐藏的特性 将数据成员都定义为公有的,这又破坏了隐藏的特性 但是如果接口采用多参数实现肯定影响程序效率 如果外界需要频繁访问这些私有成员,就不得不需要一个既安全又理想的“后门”——友元关系 * * 友元 友元是C++提供的一种破坏数据封装和数据隐藏的机制。 通过将一个模块声明为另一个模块的友元,一个模块能够引用到另一个模块中本是被隐藏的信息。 可以使用友元函数和友元类。 为了确保数据的完整性
文档评论(0)