標籤:

C++ 中的命名空間和類有什麼區別?


類的行為和命名空間是不一樣的。簡單的比較其中相似的, 命名空間和類中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有必要學嗎?

TAG:C | 命名空間 |