C++命名空间详解编程语言

一、命名空间的概念
在C++中,变量、函数和类都是大量存在的,它们都存在与全局命名空间中,会导致很多冲突,使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突。它相当于一个更加灵活的文件域(全局域),可以用花括号把文件的一部分括起来,并以关键字namespace开头给它起一个名字。

二、命名空间的定义
一个命名空间就定义了一个新的作用域,命名空间中所有内容都局限于该命名空间中。没有名称的命名空间,它的成员只在声明该命名空间的文件中可以访问,访问时不需要加命名空间名称,对于其他文件该命名空间中内容不可见。

1、普通的命名空间

//(1) 
namespace N1  //N1为命名空间的名称 
{ 
    //命名空间的内容既可以是变量,也可以定义函数 
    int a; 
    int Add(int left, int right) 
    { 
        return left + right; 
    } 
} 
 
//(2)同一工程中允许存在多个相同名称的命名空间,编译器最后会合成同一个命名空间 
namespace N1 
{ 
    int Mul(int left, int right) 
    { 
        return left * right; 
    } 
}

2、嵌套的命名空间

namespace N2 
{ 
    int a; 
    int b; 
    int Add(int left, int right) 
    { 
        return left + right; 
    } 
    namespace N3 //嵌套函数 
    { 
        int c; 
        int d; 
        int Sub(int left, int right) 
        { 
            return left - right; 
        } 
    } 
}

3、没有名称的命名空间

namespace 
{ 
    int a; 
    int Div(int left, int right) 
    { 
        if (0 == right) 
        { 
            exit(0); 
        } 
        return left / right; 
    } 
}

三、命名空间的使用
命名空间中成员该如何使用?
1、错误的使用
【例1】

#include<iostream> 
using namespace std; 
 
namespace N 
{ 
    int a = 10; 
    int b = 20; 
    int Add(int left, int right) 
    { 
        return left + right; 
    } 
 
    int Sub(int left, int right) 
    { 
        return left - right; 
    } 
} 
 
int main() 
{ 
    printf("%d/n", a);//该语句编译出错,无法识别“a” 
    return 0; 
}

编译结果:
这里写图片描述
释:一个命名空间就定义了一个新的作用域,命名空间中的所有内容都局限于该命名空间中,想使用命名空间中的数据需要引用的方式。

2、命名空间使用的方式
(1)加命名空间名称及作用域限定符

int main() 
{ 
    printf("%d/n", N::a); 
    return 0; 
}

(2)使用using将命名空间中成员引入

using N::b; 
int main() 
{ 
    printf("%d/n", N::a); 
    printf("%d/n", b); 
    return 0; 
}

(3)使用using namespace命名空间名称引入

using namespace N; 
int main() 
{ 
    printf("%d/n", N::a); 
    printf("%d/n", b); 
    cout << Add(10, 20) << endl; 
    return 0; 
}

【例2】

#include<iostream> 
using namespace std; 
 
namespace N 
{ 
    int a = 10; 
    int b = 20; 
 
    int Add(int left, int right) 
    { 
        return left + right; 
    } 
 
    int Sub(int left, int right) 
    { 
        return left - right; 
    } 
} 
 
using N::b;//使用命名空间中变量“b” 
using namespace N;//使用命名空间“N” 
 
int main() 
{ 
    printf("%d/n", N::a); 
    printf("%d/n", b); 
    cout<<Add(10, 20)<<endl; 
    system("pause"); 
    return 0; 
}

运行结果:
这里写图片描述
释:
(1)标准C++库中的所有组件都是在一个被称为std的名字空间中声明和定义的。
(2)在采用标准C++的平台上使用标准C++库中的组件,都要写一个using指示符,即“using namespace std”就可以使用标准C++库中的所有成员,或者以std::成员的方式也可以使用C++库里的成员。
(3)“::”是作用域解析符。

【例3】

#include <iostream> 
 
using namespace std; 
 
namespace bit1 
{ 
    int n = 0; 
} 
 
namespace bit2 
{ 
    int n = 10; 
} 
 
int n = 100; 
 
int main() 
{ 
    n = 1000; 
    cout << bit1::n << endl; 
    cout << bit2::n << endl; 
    cout << ::n << endl; 
    cout << n << endl << endl; 
 
    int k; 
    cout << "请输入数字:" << endl; 
    cin >> k; 
    cout << k << endl; 
 
    system("pause"); 
    return 0; 
}

运行结果:
这里写图片描述
释:
(1)cout是标准输出流对象(屏幕),<<是输出操作符;
(2)cin是标准输入流对象(键盘),>>是输入操作符;
(3)endl是换行操作符。
(4)当作用域解析符前不加任何限定符时,输出的是局部变量的值,就近原则。
(5)使用C++输入输出更方便,不需增加数据格式控制,比如:整型–%d,字符–%c。

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/18214.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论