函式概說:
函式就像一部工作機器,將某些「原料」丟進去,會有「產品」跑出來,最大的好處是可以隨時使用、重複執行。這些原料稱為「參數」,而產品稱為「回傳資料」。
- 函式的基本架構:欲建立函式,程式碼如:
回傳資料型態 函式名稱(參數1資料型態 參數1名稱 , 參數2資料型態 參數2名稱 , 參數3資料型態 參數3名稱){//函式內容 ;}
例如:
int getmax(int a, int b)
{ int R;
if (a>=b){R=a;}
else{R=b;}
return R ; //表示回傳變數R
}
註一:建立函式時,如不需輸入參數,可以不寫參數列,如:
回傳資料型態 函式名稱(){//函式內容 ;}
註二:建立函式時,如不需回傳資料,則可將回傳資料型態寫為void,如:
void 函式名稱(){//函式內容 ;}
且函式內容內的return可以省略不寫。
註三:所謂的函式特徵,指的是:
回傳資料型態 函式名稱(參數1資料型態 參數1名稱 , 參數2資料型態 參數2名稱 , 參數3資料型態 參數3名稱)
函式特徵不包括函式內容在內。
若兩函式的函式特徵完全相同,則在呼叫函式時,C++並無法分辨到底要呼叫哪一個函式,故最好避免這種情況。
註(重要):一般來說,C++程式是由主函式main()開始執行,故所有自訂函式在撰寫上的順序都必需在main()之前。
(2) 呼叫函式:函式名稱(參數1資料型態 參數1名稱 , 參數2資料型態 參數2名稱 , 參數3資料型態 參數3名稱);
這不僅會執行該函式,也會得到該函式的回傳資料。範例如:
#include <cstdlib>
#include <iostream>
using namespace std;
int getmax(int a, int b)
{
int R;
if (a>=b){R=a;}
else{R=b;}
}
int main(int argc, char *argv[])
{
cout<<"最大的是"<<getmax(10,50)<<endl; //在此呼叫函式
system("PAUSE");
return EXIT_SUCCESS;
}
執行後顯示:
最大的是50
2. 一種特殊的資料形態:參考(reference)
(1) 例:
int var1=5;
int &var2 = var1;
稱「var2是var1的參考」。對var2進行存取,等於直接對var1進行存取。
更正確的來說,var2和var1有著相同的記憶體位址,即&var2 = &var1。
(2) 若:
int var1=5;
const int &var2 = var1;
仍表示var2是var1的參考,且仍有&var2 = &var1。但const表明了無法對var2進行「存」的動作,但可以進行「取」的動作。此時若欲改變var2的取值,可直接改變var1的值。
- 另一種特殊的資料形態:指標(pointer),例:
int a=3;
int *b=&a; //稱「b為a的指標」,b的意義為:指向a在記憶中的位址。
cout<<b; // 顯示b的意義,也就是a在記憶中的位址,也就是&a。
cout<<*b; //顯示b所指向的變數的值,也就是a,也就是3。
3.參數的傳遞方式:
(1)傳值方式。為最簡單而基礎的方式,將外部的資料值複製到函數內進行操作再輸出,不會改變外部資料本身。例:
int setvar(int b) //使用傳值方式進行參數傳遞
{b=4;return b;}
void main(){
int a =5;
cout<<setvar(a); //顯示4
cout<<a; //顯示5
}
(2)參考型態傳遞方式。這種方式是將外部資料「直接拿到」函式內進行操作再輸出,「有可能改變」外部資料本身。例:
int setvar(int &b) //使用參考型態傳遞方式進行參數傳遞
{b=4;return b;}
void main(){
int a =5;
cout<<setvar(a); //顯示4
cout<<a; //顯示4,a已經從5變成4了!表示函式已經「動到」a了!
}
留言列表