C 第二十二天命名空間

2021-06-23 05:37:38 字數 2738 閱讀 3723

/*

命名空間:

命名空間的定義:

namespace namespace_name

在命名空間定義的名字可以被命名空間的中其他成員直接訪問,命名空間外部的**必須指出名字定義在哪個命名空間中:

例如:namespace_name::類/函式/變數。

也可以通過編寫using宣告來獲得對已經直到的經常使用的名字的直接訪問:

using namespace_name::類/函式/變數;

命名空間可以是不連續的:命名空間可以分散在多個檔案中,但是命名空間是積累的。

介面和實現的分離:

1.定義類的命名空間成員,以及作為類介面的一部分的函式宣告與物件宣告,可以放在標頭檔案中,使用命名空間成員的檔案可以包含這些標頭檔案。

2.命名空間成員的定義可以放在單獨的原始檔中。

巢狀的命名空間:

namespace namespace_name

//定義。

} 如果需要訪問巢狀命名空間的成員,則需要指明的命名空間為:

namespace_name::namespace_name2::類/函式/變數。

未命名的命名空間:

未命名的命名空間以關鍵字namespace開頭,接在關鍵字namespace後面的是由或括號定屆的宣告塊。

1.未命名的命名空間可以在給定檔案中不連續,但不能跨越檔案,沒個檔案有自己的未命名的命名空間。

2.為命名的命名空間用於宣告區域性於檔案的實體,在未命名的命名空間中定義的變數在程式開始時建立,在程式結束之前一直存在。

3.未命名的命名空間中定義的名字可以直接使用,因為沒有命名空間名字來限定它們,不能使用作用域操作符來引用未命名的命名空間的成員。

4.未命名的命名空間的名字只在包含該命名空間的檔案中可見。

5.未命名的命名空間中定義的名字可以在定義該命名空間所在的作用域中找到。如果在檔案的最外層作用域中定義未命名的命名空間,那麼,未命名的命名空間中的名字必須與全域性作用域定義的名字不同:

int i;//全域性作用域

//命名空間

namespace

//下面這句**錯誤。

i=10;

6.未命名的命名空間可以巢狀:

namespace local

} //訪問

local::i=10;

如果標頭檔案定義了未命名的命名空間,那麼,在每個包含該標頭檔案的檔案中,該命名空間中的名字將定義不同的區域性實體。

在所有其他的方式中,未命名的命名空間的成員都是普通程式實體。

注:c++不贊成檔案靜態宣告,不贊成的特徵是在未來版本中可能不支援的特徵,應該避免檔案靜態而使用未命名的命名空間代替。

命名空間的使用:

using宣告:using namespace_name::類名/函式/變數

using宣告遵循常規的作用域規則,宣告命名空間的某個成員可見。

using指示:using namespace namespace_name;

using指示,將注入命名空間的所有命名,可能會發生命名空間汙染。

*///using指示例子:

namespace blip

//與命名空間的成員同名

int bj=0;

void manip()

int main()

/*

類、命名空間和作用域:

對命名空間內部使用的名字的查詢遵循常規c++查詢規則:當查詢名字的時候,通過外圍作用域想外查詢。

當類包在命名空間的時候,發生相同的查詢:受限在成員中找,然後在類(包括基類)中找,再在外圍作用域中找,外圍作用域中的乙個或多個可以是命名空間。

接受類型別形參(或型別指標及引用形參)的且與類本身定義在同乙個命名空間中的函式(包括過載操作符),在用類型別物件(或類型別的引用及指標)作為實參的時候是可見的。

隱式友元宣告與命名空間:

如果該友元接受型別實參並與類隱式宣告在同一命名空間中,則使用它式可以無須使用顯式命名空間限定符。

過載與using指示:

using指示將命名空間成員提公升到外圍作用域。如果命名空間函式與命名空間所在的作用域中宣告的函式同名,就將命名空間成員加到過載集合中。

可以跨越多個using指示的過載。

*///類報在命名空間時的名字查詢,例如;

#includenamespace a

int f1()

// int f2()

int f3();

private:

int i,j;

}; //訪問命名空間裡的i

int h=i;

}int a::c1::f3()

//隱士友元與命名空間:

namespace a1;

};}//如果該友元接受型別實參並與類隱式宣告在同一命名空間中,則使用它式可以無須使用顯式命名空間限定符。

void f2()

//using指示將命名空間成員提公升到外圍作用域。如果命名空間函式與命名空間所在的作用域中宣告的函式同名,就將命名空間成員加到過載集合中。例如:

namespace libs_r_us;

extern void print(double){};

}void print(const std::string &test){};

//引入命名空間的成員,將有三個過載的print函式。

using namespace libs_r_us;

void foobar(int ival)

int main()

第二十二天

區域性變數和全域性變數 在乙個函式內部定義的變數是內部變數,他只有在本函式範圍內才有效,在此函式之外是不能使用這些變數的,這稱為區域性變數。復合語句的的變數是可以用 全域性變數也叫外部變數 全域性變數從 定義從 開始用 變數的儲存類別 從空間上講剛剛的就是作用域 從空間 還可以從變數值存在的時間 生...

2018 05 28 第二十二天

class testarraysort static void main string args int compare tiger arg0,tiger arg1 int age int getage void setage int age void setname string name voi...

第二十二天實訓!!!!

類方法 也稱為靜態方法,表示類中物件的共有行為 宣告時前面需加 static 修飾符 不能被宣告為抽象的 類方法可以在不建立物件的情況下用類名直接呼叫,也可用類例項呼叫 包 是一組類的集合 乙個包可以包含若干個類檔案,還可包含若干個包 包的作用 將相關的源 檔案組織在一起 類名的空間管理,利用包來劃...