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; }
運行結果: