Chapter5 数据的共享和保护
5.1 标识符的作用域与可见性
5.1.1 作用域
:一个标识符在程序正文中有效的区域;
1 函数原型作用域;
2 局部作用域 (具有局部作用域的变量称为局部变量);
3 类作用域;
4 命名空间作用域 (全局命名空间,自定义命名空间,匿名命名空间)
(具有命名空间作用域的变量称为全局变量);
5.1.2 可见性
:程序运行到某一点,能够引用到的标识符,就是该处可见的标识符;
作用域可见的一般规则:
1 标识符要声明在前,引用在后;
2 在同一作用域中不能声明同名的标识符;
3 在没有相互包含关系的作用域中声明的同名标识符互不影响;
4 如果在两个或多个具有包含关系的作用域中声明了同名标识符,则外层标识符在内层不可见;
5.2 对象的生存期
5.2.1 静态生存期
:对象的生存期与程序的运行期相同,即静态生存期;
静态对象:具有静态生存期的对象;
{
命名空间作用域中声明的对象;
局部作用域中用static声明的对象;
}
5.2.2 动态生存期
: 诞生于声明点,结束于声明所在的块执行完毕之时;
非静态对象都具有动态生存期;
5.3 类的静态成员
5.3.1 静态数据成员
:具有类作用域,静态生存期;
5.3.2 静态函数成员
静态成员函数可以通过类名或对象名来调用,非静态成员函数只有通过对象名来调用;
可访问该类的静态数据成员,静态函数成员;
访问非静态成员必须通过对象名;
5.4 类的友元
友元函数,友元类;
类的友元可访问protected,private成员;
友元关系不被继承,且为单方的;
5.5 共享数据的保护
5.5.1 常对象
:数据成员在对象的整个生存期内不能被更改;
5.5.2 用const修饰的类成员
1 常对象只能调用常成员函数,常成员函数无法修改数据成员(可修改mutable声明的数据成员);
2 常数据成员;
5.5.3 常引用
:常引用所引用的对象不能被更新;
5.6 多文件结构和编译预处理命令
5.6.1 C++程序组织结构
一个项目至少划分为三个文件:类声明文件(declaration.h),类实现文件(implementation.cpp),类的使用文件(main.cpp);
5.6.2 外部变量与外部函数
1 外部变量:可被非源文件使用的变量,命名空间中定义的变量默认为外部变量;
2 外部函数:所有类之外声明的函数,具有命名空间作用域;
3 将变量和函数的作用域限制在编译单元内:在匿名命名空间声明的变量和函数无法被为其他文件所用;
5.6.3 标准C++库
5.6.4 编译预处理
条件编译指令
#ifndef identifier //避免重复声明
#defien identifier
#endif
5.1 标识符的作用域与可见性
5.1.1 作用域
:一个标识符在程序正文中有效的区域;
1 函数原型作用域;
2 局部作用域 (具有局部作用域的变量称为局部变量);
3 类作用域;
4 命名空间作用域 (全局命名空间,自定义命名空间,匿名命名空间)
(具有命名空间作用域的变量称为全局变量);
5.1.2 可见性
:程序运行到某一点,能够引用到的标识符,就是该处可见的标识符;
作用域可见的一般规则:
1 标识符要声明在前,引用在后;
2 在同一作用域中不能声明同名的标识符;
3 在没有相互包含关系的作用域中声明的同名标识符互不影响;
4 如果在两个或多个具有包含关系的作用域中声明了同名标识符,则外层标识符在内层不可见;
5.2 对象的生存期
5.2.1 静态生存期
:对象的生存期与程序的运行期相同,即静态生存期;
静态对象:具有静态生存期的对象;
{
命名空间作用域中声明的对象;
局部作用域中用static声明的对象;
}
5.2.2 动态生存期
: 诞生于声明点,结束于声明所在的块执行完毕之时;
非静态对象都具有动态生存期;
5.3 类的静态成员
5.3.1 静态数据成员
:具有类作用域,静态生存期;
5.3.2 静态函数成员
静态成员函数可以通过类名或对象名来调用,非静态成员函数只有通过对象名来调用;
可访问该类的静态数据成员,静态函数成员;
访问非静态成员必须通过对象名;
5.4 类的友元
友元函数,友元类;
类的友元可访问protected,private成员;
友元关系不被继承,且为单方的;
5.5 共享数据的保护
5.5.1 常对象
:数据成员在对象的整个生存期内不能被更改;
5.5.2 用const修饰的类成员
1 常对象只能调用常成员函数,常成员函数无法修改数据成员(可修改mutable声明的数据成员);
2 常数据成员;
5.5.3 常引用
:常引用所引用的对象不能被更新;
5.6 多文件结构和编译预处理命令
5.6.1 C++程序组织结构
一个项目至少划分为三个文件:类声明文件(declaration.h),类实现文件(implementation.cpp),类的使用文件(main.cpp);
5.6.2 外部变量与外部函数
1 外部变量:可被非源文件使用的变量,命名空间中定义的变量默认为外部变量;
2 外部函数:所有类之外声明的函数,具有命名空间作用域;
3 将变量和函数的作用域限制在编译单元内:在匿名命名空间声明的变量和函数无法被为其他文件所用;
5.6.3 标准C++库
5.6.4 编译预处理
条件编译指令
#ifndef identifier //避免重复声明
#defien identifier
#endif