C C 過載簡單總結

2021-08-16 18:08:56 字數 2402 閱讀 3863

c++是c語言的繼承,在c++語法中,c語言的語法基本都適用,但是有小部分的語法略有改動。

這是一段簡單的c++程式,輸出結果是在控制台輸出adventure time。

※namespace 命名空間

#includenamespace my1 

}namespace my3

int main()

通過namespace,可以看出,我們可以在不同名稱的命名空間中定義同名的變數a,那麼此時如果要輸出其中乙個a,應該怎麼辦呢?

我們可以看到,在main函式中

std::cout << "adventure time" << std::endl;
利用::可以輸出該命名空間內的變數等,例如cout和endl關鍵字就是在std中包含的,所以如果不加入

using namespace std;
這句話,就要每次使用之前都std::***x,非常不方便。在以後可以合理利用這句**,實現簡單易行的操作。

總結:命名空間是用來進行名字隔離的,它所佔的區域叫做命名空間域。

訪問域中 my1::a;

修改域中變數 my1::=100;

訪問全域性 (空格)::a

※輸入輸出物件

cout 標準輸出流物件,《輸出操作符

cin 標準輸入流物件,>>輸入操作符

int main()
※函式過載

c++允許在同一範圍中宣告幾個功能類似的同名函式,但是對這些同名函式有以下要求:

要求:1.引數不同 2.型別不同

c++運算子(1)不能改變運算子的優先順序;

(2)不能改變運算子的結合型;

(3)預設引數

不能和過載的運算子一起使用;

(4)不能改變運算子的

運算元的個數;

(5)不能建立新的運算子,只有已有運算子可以被過載;

(6)運算子作用於c++內部提供的資料型別時,原來含義保持不變。

即:函式過載後所完成的功能或者運算要不同。例如下面這段c++**:

int add(int a, int b) 

int add(int a, int b, int c)

float add(float a, float b)

這就是add函式的過載,在c++編譯環境下可以正常執行,但是如果將檔案字尾改為.c,就不能正常的執行,會報錯。

△為什麼在c++環境內可以函式過載,在c中就不行?

首先我們要討論一下編譯的過程:

#includeusing namespace std;

int add(int a, int b)

int add(int a, int b, int c)

float add(float a, float b)

int main()

輸入結果為:

這樣是可以執行成功的,因為雖然三個函式的名稱在表面上看起來是相同的,但其實在編譯以後,這三個函式的名稱是不一樣的,所以在鏈結的時候編譯器可以找到對應得函式,而在c語言中,如果你的函式名稱是相同的,編譯以後所獲得的函式名也是完全相同的,鏈結的時候編譯器無法找到對應得函式,會產生混亂。

※預設引數

所謂預設引數,顧名思義,就是在宣告函式的某個引數的時候為之指定乙個預設值,在呼叫該函式的時候如果採用該預設值,你就無須指定該引數。

預設引數使用主要規則:

呼叫時你只能從最後乙個引數開始進行省略,換句話說,如果你要省略乙個引數,你必須省略它後面所有的引數,即:帶

預設值的引數必須放在參數列的最後面。 

預設值必須是常量。

顯然,這限制了預設引數的資料型別,例如

動態陣列

int add(int a, int b = 2)
int add(int a = 1, int b = 2)
例如,以上兩個函式,第乙個為半預設,第二個為全預設的情況。

注意:半預設時只能預設右邊的引數,第乙個引數不能預設,而且必須連續,不能隔乙個預設乙個。

C C 函式過載

把複雜的知識簡單化,就是我寫部落格的目的 seen 首先要教各位看官如何使用c 的這個特性,方法很簡單,就是寫兩個函式,裡面引數不同,然後c 這種語言編譯器就能夠自動的解析這兩個函式,然後進行輸出 我們來看乙個例子 include include using namespace std void p...

C C 函式過載

c 標準庫已經提供了交換兩個變數的值的函式,它的名字就是swap,位於algorithm標頭檔案中。引數列表不同包括引數的個數不同 型別不同或順序不同,僅僅引數名稱不同是不可以的。函式返回值也不能作為過載的依據。僅僅返回型別不同不足以成為函式的過載。c 在編譯時會根據引數列表對函式進行重新命名,例如...

C C 中幾個巨集的簡單總結

有人視巨集為洪水猛獸,甚至要求完全從c c 中摒棄,有人則認為巨集為至尊寶典,在邏輯 中都大量使用。個人認為這是個仁者見仁智者見智的問題,摒棄就沒必要了,看看巨集在mfc和atl中的一些經典應用,你會發現如果不使用巨集來實現一些訊息對映和物件對映神馬的那將讓 苦逼 程式設計師多花費多少寶貴的時間。當...