C++ 中的命名空間和類有什麼區別?
12-27
類的行為和命名空間是不一樣的。簡單的比較其中相似的, 命名空間和類中static聲明,一個顯著區別,命名空間是開放的,調用者可以繼續加內容, 類是封閉的,不可以添加成員。從設計上的一個區別,命名空間是粗粒度的,只是一個集合,比較java的package和class就很清楚。
概念上:
- 命名空間就像房子、柜子、抽屜,是放類、常量、靜態變數以及下一級命令空間的容器
- 類就像冰箱、衣服、圓珠筆,是有結構、定義了行為的一種數據結構,它們的運行時實例叫做對象
實踐中:
- 對C++來講, 基本建模工具是類而不是命令空間,命令空間主要用來避免名字衝突
- 如果概念上有嵌套的需要,首選嵌套類,因為嵌套類相比命令空間,可以
- 可以有成員方法
- 可以有訪問控制
命名空間name space可以被再次打開,並添加新成員。但是類class不允許。
舉個簡單的例子:
命名空間這麼使用是正確的:
namespace A {
int f1();
}
// Re-open and add new member is legal
namespace A {
int f2();
}
但是,類這麼使用是不正確的:
class A {
int f1();
};
// Re-open and add new member is illegal
class A {
int f2();
};
因為在C++裡面沒有 package這一個術語,有時可能會遇到兩個類命名相同,為了避免名字衝突,c++引入了命名空間
命名空間 的 作用 是避免命名衝突,方便模塊話編程。
類 完全是 面向對象的概念, 對具有類似屬性的 事物抽象 出來,在實際程序中可以對類進行實例化。類裡面可以包括成員變數,成員函數,靜態成員變數和靜態成員函數(被所有類的實例共享)。
推薦閱讀:
※單元測試到底是什麼?應該怎麼做?
※怎麼理解API和MFC的關係?
※C++ 中為什麼要有. -> ::這幾種成員訪問操作符?
※面試 C++ 程序員,什麼樣的問題是好問題?
※發現很多外掛和木馬編寫都是用MFC,MFC有必要學嗎?