C++函數
函數是一組一起執行任務的語句。每個C++程序具有至少一個函數main(),以及所有的最瑣碎程序可以定義附加功能。
可以將代碼放到獨立的函數。如何劃分代碼之間不同功能,但邏輯上的劃分通常是讓每個函數執行特定的任務。
函數聲明告訴編譯器有關的函數的名稱,返回類型和參數。一個函數定義提供了函數的實際主體。
C++標準庫提供了大量的內置函數程序可以調用。例如,strcat()連接兩個字符串,函數memcpy()複製一個存儲器位置到另一個位置,還有更多的函數。
函數使用不同的名字被知悉,如方法或子例程或過程等。
定義一個函數:
一個C++函數定義的一般形式如下:
return_type function_name( parameter list ) { body of the function }
C++函數定義由函數頭和函數體。這裡是一個函數的所有部分:
-
返回值類型: 函數會返回一個值。return_type是函數返回值的數據類型。某些函數冇有返回值執行所需的操作。在這種情況下,return_type是關鍵字void。
-
函數名稱: 這是該函數的實際名稱。函數名和參數列表一起構成了函數簽名。
-
參數: 參數是像一個占位符。當調用一個函數傳遞一個參數值。這個值被稱為實際參數或參數。參數列表指的類型,順序和數量的函數的參數。參數是可選的;也就是說,一個函數可能包含冇有參數。
-
函數體: 函數體包含了定義函數功能語句的集合。
例子:
下麵是源代碼的一個函數max()。這個函數有兩個參數num1與num2並返回兩者之間的最大值:
// function returning the max between two numbers int max(int num1, int num2) { // local variable declaration int result; if (num1 > num2) result = num1; else result = num2; return result; }
函數聲明:
函數聲明告訴編譯器有關的函數名以及如何調用該函數。該函數體可以分彆進行定義。
函數聲明有以下幾個部分:
return_type function_name( parameter list );
對於上述定義的函數max(),下麵是函數聲明:
int max(int num1, int num2);
參數名無法在隻有自己的類型是必需的,所以下麵的函數聲明重要的也是有效的聲明:
int max(int, int);
當定義在一個源文件中的函數調用在另一個文件中函數函數聲明是必需的。在這種情況下,應該在調用函數的文件的頂部聲明函數。
調用一個函數:
當創建一個C++函數,函數必須做一個定義。要使用函數,不調用或調用該函數。
當程序調用的函數,程序控製被轉移到所調用的函數。一個名為函數定義執行任務時,被執行return語句或達到其函數的右括號,則返回程序控製返回到主程序。
要調用一個函數,隻需要通過必要的參數以及函數的名稱,如果函數返回一個值,那麼可以存儲返回值。例如:
#include <iostream> using namespace std; // function declaration int max(int num1, int num2); int main () { // local variable declaration: int a = 100; int b = 200; int ret; // calling a function to get max value. ret = max(a, b); cout << "Max value is : " << ret << endl; return 0; } // function returning the max between two numbers int max(int num1, int num2) { // local variable declaration int result; if (num1 > num2) result = num1; else result = num2; return result; }
max()函數連同main()函數和編譯源代碼。在運行最後的可執行文件,它會產生如下結果:
Max value is : 200
函數參數:
如果一個函數使用參數,它必須聲明接受的參數值的變量。這些變量被調用的函數的形式參數。
形式參數就像在函數內部其他本地變量並且在進入函數創建並在退出時銷毀。
調用一個函數,有一些參數可以被傳遞給一個函數有兩種方法:
調用類型 | 描述 |
---|---|
按值調用 | 這種方法複製一個參數的實際值到函數的形式參數。在這種情況下,向參數的函數內變化對參數冇有影響 |
按指針調用 | 這種方法複製一個參數的地址複製到形式參數。函數內部的地址是用來訪問調用中使用的實際參數。這意味著,對參數的更改影響的說法 |
按引用調用 | 這種方法複製一個參數的引用而成為形式參數。內部的函數,參考用於訪問在調用中使用的實際參數。這意味著,對參數的更改影響參數。 |
默認情況下,C++使用調用按值傳遞參數。在一般情況下,這意味著一個函數中的代碼不能改變用來調用該函數的參數和上麵提到的例子,當調用max()函數中使用同樣的方法。
默認參數值
當定義一個函數,可以指定每個最後參數的默認值。這個值將被使用,如果調用該函數時,相應的參數是空白。
這是通過使用賦值運算符和函數定義的參數分配值完成的。如果不通過該參數的值,當函數被調用時,默認的給定值被使用,但如果指定的值,這個默認值被忽略,傳遞的值來代替。看看下麵的例子:
#include <iostream> using namespace std; int sum(int a, int b=20) { int result; result = a + b; return (result); } int main () { // local variable declaration: int a = 100; int b = 200; int result; // calling a function to add the values. result = sum(a, b); cout << "Total value is :" << result << endl; // calling a function again as follows. result = sum(a); cout << "Total value is :" << result << endl; return 0; }
讓我們編譯和運行上麵的程序,這將產生以下結果:
Total value is :300 Total value is :120