C++學習筆記---內部類與名字空間

內部類的定義: 把一個類的定義寫在另一個類的內部,則稱裏面這個類爲內部類。

例如,Inner就是

 class AAA
 {
public:
class Inner
{
public:
char name[64];
}
 }
 在使用該內部類時,類名要使用全程 AAA::inner。除此之外,內部類和普通類沒有任何區別。
 內部類和外部類互相沒有特權, 他們不是朋友關係,他們不是父子關係,他們沒有任何關係。
所以,外部類無法自由訪問內部類,內部類也無法自由訪問外部類。
如果內部類被 protected/private限制,則該類在外部不可見。(類名被完全隱藏)
 既然內部類和普通類並無區別,那爲什麼要把它寫在另一個類的內部呢?
 原因:
 (1)避免名字衝突
 (2)如果一個類只是在模塊內部使用,則可以實現類名隱藏
 當項目越來越大,避免類名的衝突成爲一個現實存在的問題。。。將一些只在模塊內部使用的類,寫成內部類
 注:內部類還可以再定義內部類,沒有層數限制,但一般就寫兩層
 
 名字空間
 解決名字衝突的終極手段:namespae,名字空間
 語法爲:
 namespace XXX
 {
//把類名和函數寫在這個大括號裏面
class YYY
{
};
 }   <-這裏不需要分號
 使用namespace中的名字加上一個名字前綴
 XXX::YYY obj;
 XXX::Test();
 解除前綴:using關鍵字
 如果覺得每次加上前綴麻煩,可以用using關鍵字來解除前綴。(確定不會產生名字衝突)
 using  namespace XXX; //使用XXX裏面的所有名字
 using XXX::YYY; //只使用XXX裏面的一個名字YYY
 注:在某些第三方庫中是有namespace的,因此我們在使用這些庫的時候,要確定要不要用using解除名字前綴。
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章