第6章 类的数据共享及保护.ppt

  1. 1、本文档共29页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第6章 类的数据共享与保护 6.1 对象(变量)的作用域、可见性和生存期 6.1.1 对象(变量)的作用域 6.1.2 对象(变量)的可见性 6.1.3 对象(变量)的生存期 6.2 静态成员(static) 6.2.1 静态数据成员 6.2.2 静态成员函数 6.3 友元(friend) 6.3.1 友元函数 6.2.2 友元类 6.4 常对象和常成员(const) 6.4.1 常对象 6.4.3 常成员 6.4.1 常引用 本章小结 作 业 * * 本章主要内容 对象(变量)的作用域、可见性与生存期 类的静态成员 类的友元 常引用、常对象和常成员 对象(变量)的作用域:指对象的有效范围。 - 一般情况下,对象在其作用域内是可见的和存在的,对象的作用域、可见性和生存期三者是一致的。 对象(变量)的可见性:指不同作用域的同名对象在其作用域范围内的某一处是否可被引用。 对象(变量)的生存期:指对象从诞生(占据内存)到结束(不占内存)的这段时间。在生存期内, 对象或变量将保持它的值不变, 直到它们被更新为止。 -对象(变量)的生存期分为动态生存期和静态生存期两种。 局部对象(变量):(函数内)块作用域 - 从声明处开始到块结束的花括号为止 形参对象(变量):函数作用域 - 在整个函数内有效 成员对象(变量):类作用域 - 在整个类内有效,即在所有成员函数内有效 全局对象(变量):文件作用域 - 在整个文件内有效 一般情况下对象(变量)在其作用域范围内的任一处是可见的,即可被引用。 在有不同作用域的多个同名对象(变量)的情况下,外层对象(变量)在内层不可见, 被隐藏起来。 块作用域 类作用域 文件作用域 函数作用域 作用域关系图 不同作用域的同名对象的 包含关系如右图所示。 被隐藏的成员对象(变量) 可加“类名::”来显式地引用, 被隐藏的全局对象(变量) 可加“::”来显式地引用。 对象(变量)的生存期:动态生存期、静态生存期。 动态生存期:对象(变量)在程序运行期间随时诞生和消失,如局部变量、形参变量、成员变量。 静态生存期:对象(变量)在程序运行期间一直存在,如全局变量。 C语言中静态局部变量:作用域与生存期不一致。 C++在类的成员函数中定义一个静态局部变量:该类的所有对象在调用这个成员函数时将共享这个变量。 C++类的成员为静态成员:静态成员为该类所有对象所共享,它不属于某个对象的,见下节。 程序实例 在C语言中,当把函数的一个局部变量说明为静态的,则该变量在函数调用结束后其值仍然存在,但其它函数不能引用。若下次再调用该函数,则该变量的值不再重新初始化为0,函数可以使用上次调用所保留的值。 在C++中,对于某个类所定义的每一个对象,都有其属于自身的数据成员与成员函数,不同对象之间的成员是互不相干的,这类似于C中函数内的局部变量,不同时间函数调用的局部变量是互不相干的。但它们都同名。 因此,在C++中,当把类的某个成员用关键字static说明为静态成员时, 就是把该成员定义为在该类范围内的全局成员,即无论这个类建立了多少个对象,所有对象都共用这个成员。因此,静态成员的主要用途是定义类的各个对象所共用的数据成员或成员函数,其中尤其是数据成员。 下面对静态数据成员和静态成员函数分别进行讨论。 在一个类中,若将一个数据成员说明为static,则该数据成员称为静态数据成员,无论建立多少个该类的对象,都只有一个共同的数据成员。static数据成员在编译时按全局变量方式被分配存储单元并初始化,默认的初始值为零。 欲声明一个成员为静态的,只要在其前方加上关键字static即可, 如在Point类定义一个静态数据成员countP : static int countP; 静态数据成员的使用与普通数据成员的使用并无差异,但必须注意两点: a.由于静态数据成员在该类范围内是一个全局变量,因此必须在类定义外的全局范围中给它赋初值,然后才能使用。如下所示: int Point::countP=0; 给静态数据成员赋初值时必须同时指名数据类型与所属的类,用类名加作用域运算符来限定。这里的数据类型必须与在类中声明的数据类型一致。 由于静态数据成员并不特别属于某一个对象,上述这样的赋初值语句只能在整个程序中出现一次。因此,程序员最好不要把静态成员的初始化定义在头文件中,因为头文件可能在程序中多次被引入使用,

文档评论(0)

kehan123 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档