Part5 数据的共享与保护 5.1标识符的作用域与可见性 5.2对象的生存期

5.1标识符的作用域与可见性

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

 

作用域分类:(由小到大)

  1 函数原型作用域(从形参表的左括号到形参表的右括号)

    如:double area(double radius);

  2 局部作用域(块作用域)

        如:void fun(int a) {
                int b = a;
                cin >> b;
                if (b > 0) {
                    int c; ......
                }
            }

  3 类作用域
    类的成员具有类作用域,其范围包括类体和非内联成员函数的函数体。
    如果在类作用域以外访问类的成员,要通过类名(访问静态成员),或者该类的对象名、对象引用、对象指针(访问非静态成员)。

  4 文件作用域

  5 命名空间作用域(详见第10章)

 

//5_1.cpp
#include 
using namespace std;
int i;    //全局变量,文件作用域
int main() { 
    i = 5; //为全局变量i赋值
    {
        int i; //局部变量,局部作用域
        i = 7;
        cout << "i = " << i << endl;//输出7
    }
    cout << “i = ” << i << endl;//输出5
    return 0;
}

 

 


5.2对象的生存期
对象从产生到结束的这段时间就是它的生存期。
在对象生存期内,对象将保持它的值,直到被更新为止。

 

静态生存期:
  1 这种生存期与程序的运行期相同。
  2 在文件作用域中声明的对象具有这种生存期。
  3 在函数内部声明静态生存期对象,要冠以关键字static 。

动态生存期:
  1 块作用域中声明的,没有用static修饰的对象是动态生存期的对象(习惯称局部生存期对象)。
  2 开始于程序执行到声明点时,结束于命名该标识符的作用域结束处。

//5-2变量的生存期与可见性
#include<iostream>
using namespace std;
int i = 1;//i为全局变量,且有静态生存期
void other(){
    static int a = 2;//a,b为静态局部变量,有全局寿命,局部可见。
    static int b;
    int c = 10;//c为局部变量,具有动态生存期,每次进入函数时都初始化。
    a += 2; 
    i += 32;
    c += 5;
    cout << "---OTHER---\n";
    cout << "i:" << i << " a:" << a << " b:" << b << " c:" << c << endl;
    b = a;
}
int main(){
    static int a;//静态局部变量,有全局寿命,局部可见。
    int b = -10;
    int c = 0;
    cout << "---MAIN---\n";
    cout << "i:" << i << " a:" << a << " b:" << b << " c:" << c << endl;
    c += 8;
    other();
    cout << "---MAIN---\n";
    cout << "i:" << i << " a:" << a << " b:" << b << " c:" << c << endl;
    i += 10;
    other();
    return 0;
}

 

posted @ 2017-12-01 17:21  LeoSirius  阅读(247)  评论(0编辑  收藏  举报