C++ namespace命名空间

1、什么是命名空间

简而言之:划片取名

加入有两个公司,公司A里面有一个员工小明,公司B里面有一个员工小明,两个公司在同一栋楼。这时,你去找小明,你再楼下大喊:“小明!你给我下来!”,这时两个小明都会下来,但是你如果喊:“A公司的小明,你给我下来”,这时下来的肯定就是A公司的小明了。而公司A和公司B就是命名空间。

2、程序中的命名空间

A软件公司: B软件公司:

程序库里有:变量A程序库里有:变量X

函数f1函数f1

函数f2函数f3

想一想:C软件公司如果购买了A公司和B公司的程序库,想使用A公司的变量 x,B公司的函数 f1 怎么办?

这个时候就用到了命名空间。

注意:命名空间的名字不能相同

3、怎样定义命名空间

命名空间关键字:namespace

namespace A        // A 就是空间的名称,也就是公司A的程序库
{
    int x = 0;     // 公司A程序库里面的 变量x
    void f1();     // 公司A程序库里面的 函数f1()
    void f2();     // 公司A程序库里面的 函数f2()
}
namespace B        // B就是空间的名称,也就是公司B的程序库
{
    int x = 2;     // 公司B程序库里面的 变量x
    void f1();     // 公司B程序库里面的 函数f1()
    void f2();     // 公司B程序库里面的 函数f2()
}

这个时候如果C公司调用A公司的变量和B公司的函数,代码应该怎么写呢?

cout << A::x << endl; // 调用A里面的变量x 
B::f1();              // 调用B里面的f1函数

4、代码实例

(1)没有命名空间时的代码

#include<stdlib.h>

int main(void)
{
    system("pause"); // pause 暂停
    return 0;
}

运行结果:

C++ namespace命名空间

(2)cin,cout 的命名空间

#include<stdlib.h>
#include<iostream>   // iostream 定义了std 命名空间
using namespace std; // using 和 namespace 是关键字,调用命名空间std
                     // std 是命名空间,里面包含cin , cout

int main(void)
{
    cout << "Hello" << endl; // 使用 cout 时需要命名空间

    system("pause"); // pause 暂停
    return 0;
}

运行结果:

C++ namespace命名空间

(3)模拟C公司调用A公司和B公司的代码

情况一:

#include<stdlib.h>
#include<iostream>   // iostream 定义了std 命名空间
using namespace std; // using 和 namespace 是关键字,调用命名空间std
                     // std 是命名空间,里面包含cin , cout

// A 就是空间的名称,也就是公司A的程序库
namespace A        
{
    int x = 0;  
    void f1()   
    {
        cout << "namespace A" << endl;
    }
}

// B 就是空间的名称,也就是公司B的程序库
namespace B        
{
    int x = 2;  
    void f1()   
    {
        cout << "namespace B" << endl;
    }

}

int main(void)
{

    cout << A::x << endl; // 调用A里面的变量x 
    B::f1();              // 调用B里面的f1函数

    system("pause"); // pause 暂停
    return 0;
}

情况二:

#include<stdlib.h>
#include<iostream>   // iostream 定义了std 命名空间
using namespace std; // using 和 namespace 是关键字,调用命名空间std
                     // std 是命名空间,里面包含cin , cout

// A 就是空间的名称,也就是公司A的程序库
namespace A        
{
    int x = 0;  
    void f1()   
    {
        cout << "namespace A" << endl;
    }
}

// B 就是空间的名称,也就是公司B的程序库
namespace B        
{
    int x = 2;  
    void f1()   
    {
        cout << "namespace B" << endl;
    }

}
// 如果这里直接使用using namespace B;那么下面可以直接调用B里面的函数。
using namespace B; 
int main(void)
{
    cout << A::x <<endl;
    f1();
    system("pause");
    return 0;

}

两种情况的运行结果一样:

C++ namespace命名空间

5、实战练习

题目要求:

定义一个命名空间为myNum,在该命名空间中定义一个整型变量x,并给该变量赋值为105;使用C++新特性判断myNum命名空间下的变量是奇数还是偶数。

#include<stdlib.h>
#include<iostream> 
using namespace std;

namespace myNum            //填写命名空间的关键字
{
    int x = 105;
}
int main()
{
    // 使用bool类型定义isOdd,作为状态位
        bool isFlag = false;       

    if(myNum::x % 2 == 0)
    {
        //改变状态位的值,使其为false
        isFlag = false;
    }
    else
    {
        //改变状态位的值,使其为true
        isFlag = true;
    }
    // 判断状态位的值
    if(true)
    {
        // 如果状态位的值为true,则打印变量x是奇数
        cout << myNum::x << " 是奇数" << endl;
    }
    else
    {
        // 如果状态位的值为false,则打印变量x是偶数
        cout << myNum::x << " x是偶数" << endl;
    }

    system("pause");
    return 0;
}

运行结果:

C++ namespace命名空间

原文链接: https://www.cnblogs.com/chuijingjing/p/8996212.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/273854

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月14日 下午11:54
下一篇 2023年2月14日 下午11:55

相关推荐