C/C++

数据的共享与保护

2019-03-08  本文已影响0人  Cqlismy

1、标识符的作用域与可见性

作用域的分类有:

1)函数原型作用域

double area(double radius);    //radius的作用域仅在于这,不能用于程序其他地方

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

a.函数的形参、块中声明的标识符;

b.作用域自声明处起,限与块中;

eg:局部作用域举例

局部作用域

3)类作用域

a.类的成员具有类作用域

其范围包括类体和成员函数体

b.在类的作用域以外访问类的成员:

    1、静态成员:通过类名,或者该类的对象名、对象引用访问。

    2、非静态成员:通过类名,或者该类的对象名、对象引用、对象指针访问。

4)文件作用域

a.不在前述各个作用域中出现的声明,具有文件作用域;

b.其作用域开始于声明点,结束于文件尾。

5)命名空间作用域

可见性:

1)可见性是从对标识符的引用的角度来谈的;

2)可见性表示从内层作用域向外层作用域”看“时能看见什么;

3)如果标识在某处可见,就可以在此次引用此标识符;

4)如果某个标识符在外层中声明,且在内层中没有同一标识符的声明,则该标识符在内层可见;

5)对于两个嵌套的作用域,如果内层作用域内声明了与外层作用域同名的标识符,则外层的作用域的标识符在内层不可见。

可见性

eg:全局与局部

#include <iostream>

using namespace std;

int i; //全局变量,文件作用域

int main()

{

    i = 5;

{

    int i;    //局部变量,局部作用域 i = 7;

    cout << "i = " << i << endl;

}

    cout << "i = " << i << endl;

    return 0;

}

2、对象的生存期

1)静态生存期

a.生存期与程序的运行期相同;

b.在文件作用域中声明的对象具有静态生存期;

c.在函数内部声明静态生存期对象,关键字static。

2)动态生存期

a.开始于程序执行到声明点时,结束于命名该标识符的作用域结束处;

b.块作用域中声明的,没有用static修饰的对象是动态生存期的对象(局部生存期对象)

eg:静态和动态生存期例子

#include <iostream>

using namespace std;

int i;     //i是全局变量,静态生存期

void other()

{

    /* a,b为静态局部变量,具有全局寿命,局部可见,

    第一次调用other函数进行初始化 */

    static int a = 2;

    static int b;

    /* c为局部变量,具有动态生存期,

    每次调用函数时都初始化 */

    int c = 10;

    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;     //b,c为局部变量,具有动态生存期

    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;

}

3、静态、动态数据成员

上一篇 下一篇

猜你喜欢

热点阅读