美文网首页C/C++
数据的共享与保护

数据的共享与保护

作者: Cqlismy | 来源:发表于2019-03-08 22:51 被阅读0次

    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、静态、动态数据成员

    相关文章

      网友评论

        本文标题:数据的共享与保护

        本文链接:https://www.haomeiwen.com/subject/ecwdpqtx.html