1.在c++中, 名稱可以是變量、函數、結構體、枚舉、類以及類和結構體的成員。當項目越來越大時,名稱相互沖突的可能性也將增加。使用多個廠商的類庫時,可能導致名字沖突。例如,兩個庫可能都定義了名為List,Tree和Node的類,但定義的方式不兼容。用戶可能希望使用一個庫的List類,而使用另一個類庫的Tree類。這種沖突被稱為名字空間問題。
2.一個名字空間中的名稱不會與另外一個名字空間中的相同名稱沖突,同時允許程序的其他部分使用該名字空間中聲明的東西。
3.名字空間可以使全局的,也可以嵌套在其他的名字空間中,但是不能位於代碼塊中。
4.名字空間是開放的,即可以把名稱加入到名字空間中去。
namespace Jill { char * goose(const char *); }這樣就將goose加入到了名字空間Jill中。
5.盡量使用using聲明,少使用using編譯,即多使用名字空間中的部分名稱,盡量不要將名字空間中的全部名稱導入到程序中。
6.
#include這個意思是,先將頭文件iostream放到名字空間std中,然後,using編譯指令是使該名字空間在文件下的函數中可用。using namespace std; int main() { ... }
7.給名字空間取別名:
假設已有一個名字空間 namespace my_very_favorite_things {...}
則給這個名字空間取個別名mvft的方法: namespace mvft = my_very_favorite_things;
8.類似於math.h的頭文件時與c語言兼容的,沒有使用名字空間,但c++頭文件cmath是將各種數學庫函數放到名字空間std中。
9.名字空間實例:
以下程序由三個文件構成,一個頭文件,兩個源代碼文件:
文件結構:
namesp.h代碼:
#ifndef NAMESP_H_INCLUDED #define NAMESP_H_INCLUDED #includenamesp.cpp代碼:namespace pers { struct Person { std::string fname; std::string lname; }; void getPerson(Person &); void showPerson(const Person &); } namespace debts { using namespace pers; struct Debt { Person name; double amount; }; void getDebt(Debt &); void showDebt(const Debt &); double sumDebt(const Debt ar[], int n); } #endif // NAMESP_H_INCLUDED
#includenamespp.cpp代碼:#include "namesp.h" namespace pers { using std::cout; using std::cin; void getPerson(Person & per) { cout << "Enter first name: "; cin >> per.fname; cout << "Enter last name: "; cin >> per.lname; } void showPerson(const Person & per) { std::cout << per.lname << ", " << per.fname; } } namespace debts { using std::cout; using std::cin; using std::endl; void getDebt(Debt & debt) { getPerson(debt.name); cout << "Enter debt: "; cin >> debt.amount; } void showDebt(const Debt & debt) { showPerson(debt.name); cout << ": $" << debt.amount << endl; } double sumDebt(const Debt ar[], int n) { double total = 0; for(int i = 0; i < n; i++) total += ar[i].amount; return total; } }
#include程序輸出:#include "namesp.h" using std::cin; using std::cout; using std::endl; void other(); int main() { using debts::Debt; using debts::showDebt; Debt debt = {{"zhang ", "fei"}, 2222.0}; showDebt(debt); other(); return 0; } void other() { using std::cout; using std::cin; using namespace debts; Person pr = {"Doodles", "Glister"}; showPerson(pr); cout << endl; Debt zippy[3]; for(int i = 0; i < 3; i++) getDebt(zippy[i]); for(int i = 0; i < 3; i++) showDebt(zippy[i]); cout << "Total debts is " << sumDebt(zippy, 3) << endl; }