三 C 對C的擴充套件(感謝傳智播客)

2021-07-26 07:14:51 字數 3802 閱讀 7443

4.1namespace命名空間

1:什麼是namespace命名空間

所謂namespace,是指識別符號的各種可見範圍。c++標準程式庫中的所有識別符號都被定義於乙個名為std的namespace中,更好地控制識別符號的作用域。

2:

和的不同

1)當使用時,相當於在c中呼叫庫函式,使用的是全域性命名空間,也就是早期的c++實現;

2)當使用的時候,該標頭檔案沒有定義全域性命名空間,必須使用namespace std;這樣才能正確使用cout

3:namespace三種使用方式:

1、直接指定識別符號。

例如std::ostream而不是ostream。完整語句如下:std::cout << std::hex << 3.4 << std::endl;

2、使用

using

關鍵字。

using std::cout;using std::endl; using std::cin; 以上程式可以寫成 cout << std::hex << 3.4 << endl;

3、最方便的就是使用

using namespace std; 

例如: using namespace std;這樣命名空間std內定義的所有識別符號都有效(**)。就好像它們被宣告為全域性變數一樣。那麼以上語句可以如下寫: cout <

c中的命名空間

在c語言中只有乙個全域性作用域

c語言中所有的全域性識別符號共享同乙個作用域

識別符號之間可能發生衝突 

c++中提出了命名空間的概念

命名空間將全域性作用域分成不同的部分

不同命名空間中的識別符號可以同名而不會發生衝突

命名空間可以相互巢狀

全域性作用域也叫預設命名空間

namespace namespacea

namespace namespaceb; }

}int main()

; printf("t1.name = %s\n", t1.name);

printf("t1.age = %d\n", t1.age);

system("pause");

return 0;

}

結論

1) 當使用的時候,該標頭檔案

沒有定義全域性命名空間,必須使用namespace std;這樣才能正確使用cout。若不引入using namespace std ,需要這樣做。std::cout。

2)  c++標準為了和c區別開,也為了正確使用命名空間,規定標頭檔案

不使用字尾.h。

3)  c++命名空間的定義:   namespacename

4)  using namespace namespacea;

5)  namespce定義可巢狀。

4.2register關鍵字增強

#includeusing namespace std;

/*struct型別的加強:

c語言的struct定義了一組變數的集合,c編譯器並不認為這是一種新的型別

c++中的struct是乙個新型別的定義宣告

*///struct 和class關鍵字 完成的功能是一樣的

struct teacher

;int main()

4.3 

「實用性」增加

變數什麼時候使用,什麼時候定義------隨用隨定義

#include "iostream"

using namespace std;

//c語言中的變數都必須在作用域開始的位置定義!!

//c++中更強調語言的「實用性」,所有的變數都可以在需要使用時再定義。

//隨用隨定義

int main11()

4.3 register關鍵字增強

//register關鍵字 請求編譯器讓變數a直接放在暫存器裡面,速度快

//在c語言中 register修飾的變數 不能取位址,但是在c++裡面做了內容

//1register關鍵字的變化

register關鍵字請求「編譯器」將區域性變數儲存於暫存器中

c語言中無法取得register變數位址

在c++中依然支援register關鍵字

c++編譯器有自己的優化方式,不使用register也可能做優化

c++中可以取得

register

變數的位址

//2c++編譯器發現程式中需要取register變數的位址時,register對變數的宣告變得無效。

//3早期c語言編譯器不會對**進行優化,因此register變數是乙個很好的補充。

#includeusing namespace std;

/*struct型別的加強:

c語言的struct定義了一組變數的集合,c編譯器並不認為這是一種新的型別

c++中的struct是乙個新型別的定義宣告

*///struct 和class關鍵字 完成的功能是一樣的

struct teacher

;int main()

4.4 變數檢測增強

#includeusing namespace std;

/*在c語言中,重複定義多個同名的全域性變數是合法的

在c++中,不允許定義多個同名的全域性變數

int g_var;

int g_var = 1;

c++直接拒絕這種二義性的做法。

*///int g_a;

int g_a = 10;//在c編譯器當中列印的時候會是直接是10,c++會報錯檢測增強了

int main()

4.5 c++中所有的變數和函式都必須有型別

總結:在c語言中

intf(    );表示返回值為int,接受任意引數的函式

intf(void);表示返回值為int的無參函式

在c++中

intf(  );和int f(void)具有相同的意義,都表示返回值為int的無參函式

c++更加強調型別,任意的程式元素都必須顯示指明型別

4.6 新增bool型別關鍵字

#includeusing namespace std;

/*c++中的布林型別

c++在c語言的基本型別系統之上增加了bool

c++中的bool可取的值只有true和false

理論上bool只占用乙個位元組,

如果多個bool變數定義在一起,可能會各佔乙個bit,這取決於編譯器的實現

true代表真值,編譯器內部用1來表示

false代表非真值,編譯器內部用0來表示

bool型別只有true(非0)和false(0)兩個值

c++編譯器會在賦值時將非0值轉換為true,0值轉換為false

*/int main()

傳智播客mysql分頁的實現 傳智播客 分頁

整理了一宿,終於找到了頭緒,在頭腦還算清醒時,整理下分頁的筆記.我這個分頁用的是oracle的資料庫.他在查詢時涉及到了乙個偽列.table名為 employees.建立bean物件employee.屬性如下 private int employee id private string first ...

給傳智播客的乙份感謝信

我是一名從傳智播客培訓機構出來的學員,這是我寫給咱們傳智播客學校的乙份感謝信。感謝傳智播客對我的栽培,讓我的人生從此改變,得到乙個新的世界,讓我有了一對能夠飛翔的翅膀。我不是一名大學生,我是乙個你們想不到的初中生,而且學習還很不好的那種,不上學之後我就一直在打工,直到有一天我朋友跟我介紹說來咱們傳智...

傳智播客C語言提高 記憶體四區

知識點 記憶體四區的建立流程 流程說明 1 作業系統把物理硬碟 load到記憶體 2 作業系統把c 分成四個區 3 作業系統找到main函式入口執行 記憶體四區的建立流程 如果兩個靜態變數的值一樣,在c 中編譯器會自動優化,將兩個變數的位址搞成一樣的 棧的開口方向可以測試出來,測試release和d...