函數(shù)是執(zhí)行某個任務(wù)的一組語句。每個 C++ 程序至少具有一個功能,即 main(),所有最瑣碎的程序可以定義額外的功能。
你可以將代碼分成單獨的功能。怎樣在不同的功能之間分配你的代碼取決于你,但從邏輯上講,這個劃分通常是每個函數(shù)執(zhí)行一個特定的任務(wù)。
一個函數(shù) 聲明 用來告訴編譯器函數(shù)的名字,返回值類型,和參數(shù)。一個函數(shù)的 定義 提供了函數(shù)的實際函數(shù)體。
C++ 標準庫提供了眾多的可以被您的程序直接調(diào)用的內(nèi)置功能。例如,用 strcat() 函數(shù)來連接兩個字符串,用 memcpy() 函數(shù)可以將一個內(nèi)存位置的內(nèi)容復(fù)制到另一個內(nèi)存位置,還有更多的函數(shù)。
我們知道一個函數(shù)有著各種各樣的名字諸如一種方法或子程序或一個程序等。
C++ 函數(shù)的定義的一般形式如下所示:
return_type function_name( parameter list )
{
body of the function
}
一個 C++ 函數(shù)的定義由一個函數(shù)頭和一個函數(shù)體組成。以下是一個函數(shù)的所有部分:
下面是一個叫做 max() 的函數(shù)的源代碼。這個函數(shù)包含 num1 和 num2 兩個參數(shù),并返回兩者之間的最大值:
// 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;
}
一個函數(shù)聲明告訴編譯器函數(shù)的名字和如何調(diào)用這個函數(shù)。函數(shù)的實際實體可以被單獨定義。
函數(shù)聲明有以下幾個部分:
return_type function_name( parameter list );
對于上述定義的 max()
函數(shù),以下是這個函數(shù)的聲明:
int max(int num1, int num2);
參數(shù)的名稱在函數(shù)聲明中并不重要,但是參數(shù)的類型是必須有的,所以以下也是有效的聲明:
int max(int, int);
當你在一個源文件中定義了一個函數(shù)并且在另一個文件中調(diào)用了該函數(shù)時,函數(shù)的聲明是必需的。在這種情況下,你應(yīng)該在調(diào)用該函數(shù)的文件的頂部聲明這個函數(shù)。
當你創(chuàng)建一個 C++ 函數(shù)時,你給出這個函數(shù)應(yīng)該做什么的一個定義。若要使用一個函數(shù),你將需要調(diào)用或喚起這個函數(shù)。
當一個程序調(diào)用一個函數(shù)時,程序控制轉(zhuǎn)到所調(diào)用的函數(shù)。被調(diào)用的函數(shù)執(zhí)行定義的任務(wù),當執(zhí)行到返回語句或函數(shù)執(zhí)行到該函數(shù)結(jié)尾的右大括號時,它將程序控制返回給主程序。
要調(diào)用一個函數(shù),你只需要傳遞所需的參數(shù)以及函數(shù)名,如果函數(shù)返回一個值,然后你可以存儲返回的值。舉個例子:
#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() 函數(shù)跟在 main() 函數(shù)后面然后編譯源代碼。當運行最終可執(zhí)行文件時,它將產(chǎn)生以下結(jié)果:
Max value is : 200
如果一個函數(shù)要使用參數(shù),它必須聲明接受參數(shù)值的變量。這些變量被稱為函數(shù)的形參。
像其他本地變量一樣,這些形參在函數(shù)中,在進入函數(shù)時創(chuàng)建,在退出函數(shù)時銷毀。
當調(diào)用函數(shù)時,這里有兩種方式可以將參數(shù)傳遞給函數(shù)。
調(diào)用類型 | 描述 |
---|---|
通過值調(diào)用 | 這個方法將參數(shù)的實際值復(fù)制到該函數(shù)的形參。在這種情況下,在函數(shù)中對該參數(shù)做出的更改對這個參數(shù)沒有影響。 |
通過指針調(diào)用 | 這個方法將參數(shù)的地址復(fù)制到形參中。在函數(shù)的內(nèi)部,這個地址用來在調(diào)用中訪問這個實參。這意味著,對參數(shù)所做出的更改會影響參數(shù)。 |
通過引用調(diào)用 | 這個方法將參數(shù)的引用復(fù)制到形參中。在函數(shù)的內(nèi)部,這個引用用來在調(diào)用中訪問這個形參。這意味著,對參數(shù)所作出的更改會影響參數(shù)。 |
默認情況下, C++ 使用通過值調(diào)用來傳遞參數(shù)。一般情況下,這意味著,在函數(shù)內(nèi)部的代碼不能改變用來調(diào)用函數(shù)的參數(shù)的值,在上面提到的例子中,當調(diào)用 max() 函數(shù)時使用了。
當你定義一個函數(shù)時,你可以為每個最后的參數(shù)指定一個默認值。當調(diào)用函數(shù)時,如果對 應(yīng)的參數(shù)為空時,將使用此值。
這是在函數(shù)定義中通過使用賦值運算符和在函數(shù)定義中進行參數(shù)賦值完成的。如果當調(diào)用 該函數(shù)時,該參數(shù)的值沒有被傳遞,則使用默認給定的值,但如果指定了一個值,這個默 認值被忽略,而使用傳遞的值。請考慮下面的示例:
#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;
}
當上面的代碼被編譯和執(zhí)行后,它將產(chǎn)生以下結(jié)果:
Total value is :300
Total value is :120
更多建議: