c++作用域

作用域

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

1.函数原型作用域

函数作用域是C++程序中最小的作用域,在函数原型声明时参数的作用范围就是函数原型的作用域

2.局部作用域

函数体内声明的变量,其作用域从声明处开始,一直到声明所在的块结束的大括号为止,局部变量的作用范围便是局部作用域。

3.类作用域

类可以被看做是一组有名成员的集合,类的成员m具有类作用域,对m的访问有三种:

(1)如果在X的成员函数中没有声明同名的局部作用域标识符,那么在该函数内可直接访问成员m.也就是说m在这样的函数中都起作用。
(2)通过表达式x m或者x::m。这正是程序中访问对象成员的最基本方法。
(3) 通过ptr- >m这样的表达式,其中ptr为指向x类的一个对象的指针。

4.命名空间作用域

一个大型的程序通常)模块构成 .不同的模块甚至有可能 是由不同人员开 发的。不同模块 中的类和丽数可能发生重名。这样就会引发错误。 这就好像上海和武汉都有南京路,如果在缺乏k的情况下直接说出“南京路”,就会产生歧义。但如果说“上海的南京路”或武汉的”,歧义就会消除。命名空间起到的就是这样的作用。命名空间的语法形式如下:
    namespace 命名空间名
{
    命名空间内的各种声明(函数声明、类声明、......)
}

一个命名空间确定一个命名域,在空间内声明的都属于该命名空间域,但要使用其他空间的标志符,需要使用下面的语法:
命名空间名::标识符名

作用域示例:

    #include <iostream>
    using namespace std;
    int i;//在全局命名空间中的全局变位
    namespace Ns 
    {
        int j;//在N命名空间中的全局变量
    }
    int main()
    {
    i=5; //为全局变量 i 赋值
    Ns::j=6;//为全局变量 j 赋值
    {
        using namespace Ns;//使得在当前块中可以直接引用Ns命名空间的标识符
        int i;//局部变量,局部作用域
        i=7;
        cout<<"i="<<i<<endl; //输出 7
        cout<<"j="<<j<<endl; //输出6
    }
       cout<<"i="<< i<< endl;//输出5
        return 0;
    }

运行结果:

在这个例子中,变量i具有命名空间作用城,它属于全局命名空间,其有效作用范围到文件尾才结束。在主函数开始处给这个具有命名空同作用域的变量赋初值5.接下来在子块1中又声明了同名变量并赋初值7。第一次输出的结果是7.这是因为具有局部作用域的变量i把具有命名空间作用域的变量i隐藏了,具有命名空间作用域的变量i,变得不可见(这是下面要讨论的可见性问题)。当程序运行到块1结束后,进行第二次输出时,输出的就是具有命名空同作用域的变量i的值5。变量j也具有命名空间作用域,它被声明在命名空间Ns中,在主函数中通过Ns::j的方式引用,为其赋值,接下来在块1中,通过using namespace Ns使得该命名空间的标识符可以在该块中被直接引用,因此输出j时可以直接使用标识符j.

posted @ 2019-09-26 17:16  卖女孩的男孩  阅读(721)  评论(0编辑  收藏  举报