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;
}

運行結果:

(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;
}

運行結果:

(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;

}

兩種情況的運行結果一樣:

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;
}

 運行結果:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM