第一节 作用域和可见性
作用域
作用域就是一个标识符在程序正文中有效的区域。
- 函数原型作用域:
最小的作用域。函数原型声明时形式参数的作用范围。在两个括号之间。
- 局部作用域(函数形参):
从形参声明到整个函数体结束。
- 局部作用域(局部变量):
从声明处一直到声明所在块结束的大括号为止。
- 类作用域:
类作用域之外,只能分别通过”.”或”->”来访问成员。
- 命名空间作用域:
全局命名空间:即默认的命名空间。在显式声明的命名空间之外的标识符都在全局命名空间中。
显式声明的命名空间:用namespace关键字声明的命名空间,可以有名称也可以匿名。可以用命名空间名称加域操作符”::”来调用命名空间内的函数、变量或类。
可见性
可见性是指程序运行到某一点,能够引用到的标识符,就是该处可见的标识符。
- 一般规则:
- 表示只有在声明后可见。
- 如果有两个同名的标识符,外层的标识符会被隐藏,只有内层标识符可见。
- 同作用域的标识符不能同名。
静态生存期
※对象的生存期和程序运行期相同,称则它具有静态生存期。
※命名空间作用域中声明的对象都是具有静态生存期的,要在局部作用域中声明静态生存期对象,需要使用static
关键字。
动态生存期
※动态生存期对象又称局部生存期对象,是在局部作用域中声明的。
※局部生存期对象诞生于声明点,结束于声明所在块执行完毕之时。
第二节 类的成员生存期
类的成员生存期
类成员也有各自生存期。不用static修饰的非静态成员,其生存期和它们所属对象一致。
类的静态成员
★类的静态成员是属于类的,而不是属于每个实例对象的。
- 静态数据成员:
它是整个类所共有的属性,不属于某一个具体对象,所以它又被称为”类属性”。对于任何实例对象,它的值是相同的。它具有静态生存期。
- 静态函数成员:
只能直接访问静态成员。要访问非静态成员必须通过对象名。
第三节 类的友元
概述
※友元关系提供了不同类或对象的成员函数之间、类的成员函数与一般函数之间进行数据共享的机制。
友元函数
※友元函数是在类中用关键字friend修饰的非成员函数。
★友元函数的函数体中可以通过对象名访问类的私有成员和保护成员。
※友元函数可以是普通函数,也可以是另一个类的成员函数。
友元类
★若类B是类A的友元,则类B中所有成员函数都是类A的友元函数。
※友元关系是单向的。
※友元关系不能传递和继承。
第四节 共享数据的保护
概述
数据共享破坏了数据的安全。因此,对于需要共享又需要防止改变的数据应该声明为常量。常量是不可改变的,可以有效保护数据。
常对象
※常对象必须初始化,而且不能被更新。即它的数据成员值在对象的整个生存期内不能被改变。
- 声明格式:
const A a();或者const A a = A();
常函数成员
※使用const关键词修饰的成员函数。
※常函数成员不能更新对象的数据成员。
- 声明格式:
返回值类型 函数名(参数表) const
常数据成员
※使用const关键字声明的数据成员。
- 声明格式:
const int a;或者static const int b;
常引用
※声明引用时用const修饰,被声明的引用就是常引用。常引用所引用的对象不能被更新。(常引用做形参,则可以避免对实参的意外修改)
※非const引用只能绑定普通对象,不能绑定到常对象,而常应用可以。
※常引用可以绑定到普通对象和常对象,通过该引用访问对象时都当做常对象。
- 声明格式:
const 类型说明符 & 引用名