- 3
- 0
- 约4.91千字
- 约 29页
- 2023-09-05 发布于广东
- 举报
第一页,共二十九页,2022年,8月28日 6.1 对象(变量)的作用域、可见性和生存期 对象(变量)的作用域:指对象的有效范围。 - 一般情况下,对象在其作用域内是可见的和存在的,对象的作用域、可见性和生存期三者是一致的。 对象(变量)的可见性:指不同作用域的同名对象在其作用域范围内的某一处是否可被引用。 对象(变量)的生存期:指对象从诞生(占据内存)到结束(不占内存)的这段时间。在生存期内, 对象或变量将保持它的值不变, 直到它们被更新为止。 -对象(变量)的生存期分为动态生存期和静态生存期两种。 第二页,共二十九页,2022年,8月28日 6.1.1 对象(变量)的作用域 局部对象(变量):(函数内)块作用域 - 从声明处开始到块结束的花括号为止 形参对象(变量):函数作用域 - 在整个函数内有效 成员对象(变量):类作用域 - 在整个类内有效,即在所有成员函数内有效 全局对象(变量):文件作用域 - 在整个文件内有效 第三页,共二十九页,2022年,8月28日 6.1.2 对象(变量)的可见性 一般情况下对象(变量)在其作用域范围内的任一处是可见的,即可被引用。 在有不同作用域的多个同名对象(变量)的情况下,外层对象(变量)在内层不可见, 被隐藏起来。 块作用域 类作用域 文件作用域 函数作用域 作用域关系图 不同作用域的同名对象的 包含关系如右图所示。 被隐藏的成员对象(变量) 可加“类名::”来显式地引用, 被隐藏的全局对象(变量) 可加“::”来显式地引用。 第四页,共二十九页,2022年,8月28日 6.1.3 对象(变量)的生存期 对象(变量)的生存期:动态生存期、静态生存期。 动态生存期:对象(变量)在程序运行期间随时诞生和消失,如局部变量、形参变量、成员变量。 静态生存期:对象(变量)在程序运行期间一直存在,如全局变量。 C语言中静态局部变量:作用域与生存期不一致。 C++在类的成员函数中定义一个静态局部变量:该类的所有对象在调用这个成员函数时将共享这个变量。 C++类的成员为静态成员:静态成员为该类所有对象所共享,它不属于某个对象的,见下节。 程序实例 第五页,共二十九页,2022年,8月28日 6.2 静态成员(static) 在C语言中,当把函数的一个局部变量说明为静态的,则该变量在函数调用结束后其值仍然存在,但其它函数不能引用。若下次再调用该函数,则该变量的值不再重新初始化为0,函数可以使用上次调用所保留的值。 在C++中,对于某个类所定义的每一个对象,都有其属于自身的数据成员与成员函数,不同对象之间的成员是互不相干的,这类似于C中函数内的局部变量,不同时间函数调用的局部变量是互不相干的。但它们都同名。 第六页,共二十九页,2022年,8月28日 因此,在C++中,当把类的某个成员用关键字static说明为静态成员时, 就是把该成员定义为在该类范围内的全局成员,即无论这个类建立了多少个对象,所有对象都共用这个成员。因此,静态成员的主要用途是定义类的各个对象所共用的数据成员或成员函数,其中尤其是数据成员。 下面对静态数据成员和静态成员函数分别进行讨论。 第七页,共二十九页,2022年,8月28日 6.2.1 静态数据成员 在一个类中,若将一个数据成员说明为static,则该数据成员称为静态数据成员,无论建立多少个该类的对象,都只有一个共同的数据成员。static数据成员在编译时按全局变量方式被分配存储单元并初始化,默认的初始值为零。 欲声明一个成员为静态的,只要在其前方加上关键字static即可, 如在Point类定义一个静态数据成员countP : static int countP; 第八页,共二十九页,2022年,8月28日 静态数据成员的使用与普通数据成员的使用并无差异,但必须注意两点: a.由于静态数据成员在该类范围内是一个全局变量,因此必须在类定义外的全局范围中给它赋初值,然后才能使用。如下所示: int Point::countP=0; 给静态数据成员赋初值时必须同时指名数据类型与所属的类,用类名加作用域运算符来限定。这里的数据类型必须与在类中声明的数据类型一致。 第九页,共二十九页,2022年,8月28日 由于静态数据成员并不特别属于某一个对象,上述这样的赋初值语句只能在整个程序中出现一次。因此,程序员最好不要把静态成员的初始化定义在头文件中,因为头文件可能在程序中多
原创力文档

文档评论(0)