close

< C++完整教學目錄 >

 

              函式概說:

函式就像一部工作機器,將某些「原料」丟進去,會有「產品」跑出來,最大的好處是可以隨時使用、重複執行。這些原料稱為「參數」,而產品稱為「回傳資料」。

  1. 函式的基本架構:欲建立函式,程式碼如:

回傳資料型態 函式名稱(參數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;}

  return R ;  //表示回傳變數R

}

   

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;

稱「var2var1參考」。對var2進行存取,等於直接對var1進行存取。

更正確的來說,var2var1有著相同的記憶體位址,即&var2 = &var1

(2) 若:

int var1=5;

const int &var2 = var1;

仍表示var2var1參考,且仍有&var2 = &var1。const表明了無法對var2進行「存」的動作,但可以進行「取」的動作。此時若欲改變var2的取值,可直接改變var1的值。

  1. 另一種特殊的資料形態:指標(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;  //顯示4a已經從5變成4了!表示函式已經「動到」a了!

}

 

 

<下一頁--(1)~(4)綜合範例 >

 

 

arrow
arrow
    創作者介紹
    創作者 埃伯 的頭像
    埃伯

    程式語言教學

    埃伯 發表在 痞客邦 留言(0) 人氣()