第五章 数据的共享和保护
5.1标识符的作用域和可见性
可见性:标识符是否可以引用的问题
作用域:是标识符的有效范围
① 函数原型作用域:函数原型中的参数
② 局部作用域:从声明处开始,到块结束的右大括号
③ 类作用域:类的成员具有类作用域
④ 命名空间作用域(具有命名空间作用域的变量也称为全局变量)
5.2对象的生存期
①静态生存期:
·与程序的运行期相同
·在命名空间作用域中声明的对象具有
·在函数内部声明的静态生存期对象要加static
②动态生存期:
·局部作用域中声明的对象具有(局部生存期对象)
5.3类的静态成员
·用static声明
·该类的所有对象维护该成员的同一个拷贝
·必须在类外定义和初始化,用::指明所属类
静态成员函数:
·类外代码可以使用类名和作用域操作符::来调用静态成员函数
·只能引用属于该类的静态数据成员或静态成员函数
5.4类的友元
①友元函数:是在类声明中由friend修饰说明的非成员函数
在它的函数体中,能通过对象名访问private和protected成员
1. 普通函数
2. 其他类的成员函数(可以通过它访问另一个类中的成员)
②友元类:若类B为类A的友元,则类B的所有成员都能访问类A的private和protected成员
注意:友元关系:①不能传递②单向③不被继承
5.5共享数据的保护
①常对象 :例:const A a(3,4);
数据成员的值,在对象的整个生存期间不能被改变,必须进行初始化,且不能被更新
②用const修饰的类成员:常成员函数 、 常数据成员 (const可以区分重载函数)
常成员函数不能更新目的对象的数据成员,通过常对象只能调用常成员函数,其他函数不行
③常引用
被引用的对象不能被更新,可以绑定到 普通对象 或 常对象(非const引用不能)。