zhouqijie

第一节 作用域和可见性

作用域

作用域就是一个标识符在程序正文中有效的区域。

最小的作用域。函数原型声明时形式参数的作用范围。在两个括号之间。

从形参声明到整个函数体结束。

从声明处一直到声明所在块结束的大括号为止。

类作用域之外,只能分别通过”.”或”->”来访问成员。

全局命名空间:即默认的命名空间。在显式声明的命名空间之外的标识符都在全局命名空间中。
显式声明的命名空间:用namespace关键字声明的命名空间,可以有名称也可以匿名。可以用命名空间名称加域操作符”::”来调用命名空间内的函数、变量或类。

可见性

可见性是指程序运行到某一点,能够引用到的标识符,就是该处可见的标识符。

  1. 表示只有在声明后可见。
  2. 如果有两个同名的标识符,外层的标识符会被隐藏,只有内层标识符可见。
  3. 同作用域的标识符不能同名。

静态生存期

※对象的生存期和程序运行期相同,称则它具有静态生存期。
※命名空间作用域中声明的对象都是具有静态生存期的,要在局部作用域中声明静态生存期对象,需要使用static关键字。

动态生存期

※动态生存期对象又称局部生存期对象,是在局部作用域中声明的。
※局部生存期对象诞生于声明点,结束于声明所在块执行完毕之时。





第二节 类的成员生存期

类的成员生存期

类成员也有各自生存期。不用static修饰的非静态成员,其生存期和它们所属对象一致。

类的静态成员

★类的静态成员是属于类的,而不是属于每个实例对象的。

它是整个类所共有的属性,不属于某一个具体对象,所以它又被称为”类属性”。对于任何实例对象,它的值是相同的。它具有静态生存期。

只能直接访问静态成员。要访问非静态成员必须通过对象名。





第三节 类的友元

概述

※友元关系提供了不同类或对象的成员函数之间、类的成员函数与一般函数之间进行数据共享的机制。

友元函数

※友元函数是在类中用关键字friend修饰的非成员函数。
★友元函数的函数体中可以通过对象名访问类的私有成员和保护成员。
※友元函数可以是普通函数,也可以是另一个类的成员函数。

友元类

★若类B是类A的友元,则类B中所有成员函数都是类A的友元函数。
※友元关系是单向的。
※友元关系不能传递和继承。





第四节 共享数据的保护

概述

数据共享破坏了数据的安全。因此,对于需要共享又需要防止改变的数据应该声明为常量。常量是不可改变的,可以有效保护数据。

常对象

※常对象必须初始化,而且不能被更新。即它的数据成员值在对象的整个生存期内不能被改变。

常函数成员

※使用const关键词修饰的成员函数。
※常函数成员不能更新对象的数据成员。

常数据成员

※使用const关键字声明的数据成员。

常引用

※声明引用时用const修饰,被声明的引用就是常引用。常引用所引用的对象不能被更新。(常引用做形参,则可以避免对实参的意外修改)
※非const引用只能绑定普通对象,不能绑定到常对象,而常应用可以。
※常引用可以绑定到普通对象和常对象,通过该引用访问对象时都当做常对象。