C 的頭函式和命名空間

2021-09-10 03:43:38 字數 2004 閱讀 1693

第一次寫部落格,具體怎麼操作還不太清楚。本著知識輸出的精神,硬著頭皮來啦!

由於在學習c++,所以主要更新c++在書本中或者實踐中的心得。參考書是《c++ prime plus》——一本比較基礎的入門書籍。

## c++的標頭檔案

一直很奇怪為什麼c或者c++程式中總要有乙個奇怪的:

#include<>

開頭的格式,而且裡面有時候有.h,有時候沒有。看了這本書終於看懂了(之前果然是因為自己沒有深刻的求知精神啊)。

扯遠了,比如,#include的意思是將iosteam.**件新增到程式中。比如對於乙個程式,新建出來是刷白刷白的,什麼能呼叫的功能都沒有,連輸入cin輸出cout都沒有,這個時候如果你包含了iostream.**件,那麼你就能在主程式中使用cin和cout了(當然光有這個還要有命名空間才行,但是差不多是這個意思)。

標頭檔案很重要,他包含了幾種形式:

|c++舊式|以.h結尾i |c++可以使用

|c舊式|以.h結尾|c++可以使用

|c++新式|沒有副檔名|c++可使用,但是要namespace std

本著實踐出真知的精神,我嘗試了第一種方式:

#include
然而並不能成功執行,還有另外一種方式:

#include"iostream.h"
同樣不行,所以就規規矩矩寫成:

#include
對於命名空間,由於之前直接接觸了一下linux下的qt介面編輯,所以一直不懂這個命名空間是幹嘛的。現在好像明白了。

對於乙個稍微複雜的程式,可能有兩個同名的函式,這樣可能導致編譯出錯。那麼如何解決這個問題呢?程式設計師讓封裝好的函式放在乙個命名空間下,雖然你兩個函式名字一樣,但是命名空間不一樣,這樣編譯器就不出錯了吧?機制的很。

比如:

microflop::wanda(「go dancing?」);

piscine::wanda(「a fish named destiny」);

同乙個函式wanda(),被分別封裝在microflop和piscine兩個不同的命名空間中,但是可以在乙個函式中使用。

同時對於namespace,有兩種不同的用法:

第一種比較偷懶:

using namespace std;
這樣std的所有名稱都可以直接用了,但是如果遇到同名的檔案就是出事了;

第二種方法比較好:

using std::cout;

using std::endl;

using std::cin;

這種方法在後面的程式中可以直接使用這三個功能函式。但是要再使用其他的函式也要在此宣告。怪不得在qt程式設計的時候有很多的「命名空間::」。

不過對於c++的入門來說,不會有太多的複雜程式和同名函式,所以後面暫時都用第一種偷懶的方式。

分割線
關於命名空間有幾種方式:

第一種就是直接在標頭檔案的地方:

#includeusing namespace std;
這種命名方式最懶也最容易出問題,但是對於初學者應該沒什麼影響!

第二種方式是寫在主函式裡面

int main()

這種方式只允許在主函式裡面使用std包含的物件(比如cout、cin)。

第三種方式:

std::cout<<"i like c++「;

std::cin>>like;

這種方式經常出現在qt介面程式設計裡面,是一種比較麻煩但是也比較保險的方法!

第四種方式:

#includeusing std::cout;

using std::cin;

這種方式在標頭檔案下面宣告以後,就可以在其他函式位置使用這兩個物件。

分割線

C 命名和命名空間(Namespace)

常用的命名方法有兩種 一種是pascal命名法 帕斯卡命名法 另一種camel命名法 駝峰命名法 pascal命名法是指個單詞的首字母大寫 camel 命名法是指第乙個單詞小寫,從第二個單詞開始每個單詞的首字母大寫。變數的命名規則 變數的命名規則遵循 camel 命名法,並盡量使用能描述變數作用的英...

C 命名空間 過載函式

1.意義 c 中引入命名空間的概念,旨在防止命名衝突與命名汙染。2.定義方式 namespace 命名空間名2.特點 1 可以巢狀 即某個命名空間內部還可以再定義另乙個命名空間 2 多個命名空間可以使用相同的名字。但是這不就違背了引入命名空間的初衷嗎。其實並不是,多個命名空間可以擁有相同的名字,但是...

函式的引數和命名空間

1 函式無論傳入多少位置引數都可以正常執行 2 函式無論傳入多少關鍵字引數都可以正常執行 def qwer x,y,a print x,y,b qwer qwer a 1,b 2,c 3,d 4 qwer x 1,y 2 1 2 3 定義乙個函式無論傳入多少個位置引數和關鍵字都可以正常執行 def ...