在本文中,您將學(xué)習(xí)有關(guān)C ++中函數(shù)的所有知識(shí)。有哪些類型的函數(shù),如何在示例中使用它們。
在編程中,函數(shù)是指將代碼分組以執(zhí)行特定任務(wù)的代碼塊。
取決于函數(shù)是預(yù)定義的還是由程序員創(chuàng)建的;函數(shù)有兩種類型:
標(biāo)準(zhǔn)庫函數(shù)
用戶定義函數(shù)
庫函數(shù)是C ++編程中的內(nèi)置函數(shù)。
程序員可以通過直接調(diào)用函數(shù)來使用庫函數(shù);他們不需要自己編寫。
#include <iostream> #include <cmath> using namespace std; int main() { double number, squareRoot; cout << "輸入一個(gè)數(shù)字: "; cin >> number; // sqrt()是一個(gè)用于計(jì)算平方根的庫函數(shù) squareRoot = sqrt(number); cout << "數(shù)字 " << number << " 的平方根= " << squareRoot; return 0; }
輸出結(jié)果
輸入一個(gè)數(shù)字: 26 數(shù)字 26 的平方根 = 5.09902
在上面的示例中,調(diào)用sqrt()庫函數(shù)來計(jì)算數(shù)字26的平方根。
上述程序中的注意代碼#include <cmath>。 在這里cmath是頭文件。sqrt()函數(shù)定義在cmath頭文件中。
當(dāng)您使用#include <cmath>將文件cmath的內(nèi)容包含到這個(gè)程序中時(shí),您可以使用cmath中定義的所有函數(shù)。
每個(gè)有效的C ++程序至少具有一個(gè)函數(shù),即main()函數(shù)。
C ++允許程序員定義自己的函數(shù)。
用戶定義的函數(shù)將執(zhí)行特定任務(wù)的代碼分組,并為該組代碼指定名稱(標(biāo)識(shí)符)。
從程序的任何部分調(diào)用該函數(shù)時(shí),它們都將執(zhí)行函數(shù)主體中定義的代碼。
根據(jù)上圖。
當(dāng)程序開始運(yùn)行時(shí),系統(tǒng)將調(diào)用main()函數(shù),即程序開始運(yùn)行時(shí)從main()函數(shù)執(zhí)行代碼。
當(dāng)程序的控制權(quán)到達(dá)main()內(nèi)部的function_name()時(shí),它將移至void function_name()并執(zhí)行void function_name()內(nèi)部的所有代碼。
然后,程序的控制返回到主函數(shù),在該函數(shù)中,如上圖所示,執(zhí)行了對(duì)function_name()的調(diào)用之后的代碼。
C ++程序?qū)蓚€(gè)整數(shù)相加。創(chuàng)建一個(gè)函數(shù)add()以添加整數(shù)并在main()函數(shù)中顯示sum。
#include <iostream> using namespace std; // 函數(shù)原型(聲明) int add(int, int); int main() { int num1, num2, sum; cout<<"輸入兩個(gè)要相加的數(shù)字: "; cin >> num1 >> num2; // 調(diào)用函數(shù) sum = add(num1, num2); cout << "總和 = " << sum; return 0; } // 函數(shù)定義 int add(int a, int b) { int add; add = a + b; // 返回語句 return add; }
輸出結(jié)果
輸入兩個(gè)要相加的數(shù)字: 8 -4 總和 = 4
如果在main()函數(shù)之后定義用戶定義的函數(shù),編譯器將顯示錯(cuò)誤。這是因?yàn)榫幾g器不知道用戶定義的函數(shù)、傳遞給函數(shù)的參數(shù)類型和返回類型。
在C ++中,函數(shù)原型是函數(shù)的聲明,而沒有它的主體來提供有關(guān)用戶定義函數(shù)的編譯器信息。 上例中的函數(shù)原型為:
int add(int, int);
你可以看到,原型中沒有函數(shù)體。而且,只有返回類型的參數(shù),沒有參數(shù)。您也可以像下面這樣聲明函數(shù)原型,但不需要編寫參數(shù)。
int add(int a, int b);
注意:如果用戶定義的函數(shù)在main()函數(shù)之前存在,則不必定義原型。
要執(zhí)行功能主體的代碼,需要調(diào)用(調(diào)用)用戶定義的功能。
在上面的程序中,add(num1,num2);內(nèi)部main()函數(shù)調(diào)用用戶定義的函數(shù)。
該函數(shù)返回一個(gè)整數(shù),該整數(shù)存儲(chǔ)在variable中add。
函數(shù)本身稱為函數(shù)定義。上面程序中的函數(shù)定義是:
// 函數(shù)定義 int add(int a,int b) { int add; add = a + b; return add; }
當(dāng)函數(shù)被調(diào)用時(shí),控制被轉(zhuǎn)移到函數(shù)體的第一個(gè)語句。
然后,依次執(zhí)行函數(shù)體中的其他語句。
當(dāng)函數(shù)定義中的所有代碼都被執(zhí)行時(shí),程序的控制移動(dòng)到調(diào)用程序。
在編程中,參數(shù)(parameter)是指在調(diào)用函數(shù)時(shí)傳遞給函數(shù)(函數(shù)定義)的數(shù)據(jù)。
在上面的示例中,兩個(gè)變量num1和num2在函數(shù)調(diào)用期間被傳遞給函數(shù)。這些參數(shù)稱為實(shí)際參數(shù)。
num1和num2的值分別初始化為變量a和b。 這些參數(shù)a和b稱為形式參數(shù)。
如下圖所示:
關(guān)于傳遞參數(shù)的注意事項(xiàng)
實(shí)際參數(shù)和形式參數(shù)的數(shù)量應(yīng)相同。(例外:函數(shù)重載)
第一個(gè)實(shí)際參數(shù)的類型應(yīng)與第一個(gè)形式參數(shù)的類型匹配。同樣,第二個(gè)實(shí)際參數(shù)的類型應(yīng)該與第二個(gè)形式參數(shù)的類型匹配,依此類推。
您可以在不傳遞任何參數(shù)的情況下調(diào)用函數(shù)a。 傳遞給函數(shù)的參數(shù)數(shù)量取決于程序員如何解決問題。
您可以為參數(shù)指定默認(rèn)值。這些參數(shù)稱為默認(rèn)參數(shù)。
在上面的程序中,兩個(gè)參數(shù)都是int類型。但是沒有必要同時(shí)使用兩個(gè)相同類型的參數(shù)。
函數(shù)可以使用return語句將單個(gè)值返回到調(diào)用程序。
在上面的程序中,使用以下語句將add的值從用戶定義函數(shù)返回到調(diào)用程序:
return add;
下圖演示了return語句的工作。
在上面的程序中,將用戶定義函數(shù)中的add值返回給調(diào)用函數(shù)。然后該值被存儲(chǔ)到一個(gè)變量sum中。
注意返回的變量,即add是int類型,sum也是int類型。
另外,請(qǐng)注意,函數(shù)的返回類型是在函數(shù)聲明符int add(int a, int b)中定義的,在add(int a, int b)之前的int表示函數(shù)應(yīng)該返回一個(gè)int類型的值。
如果沒有值返回到調(diào)用函數(shù),則應(yīng)使用void。