C++ 入門指南 - 函數

函數 (function) 是一種功能性的模組,可以將程式 (program) 分割成小部分,藉由呼叫函數安排執行順序




定義函數需要指定函數的回傳值型態 (return type) 、函數名稱與小括弧中的參數列 (parameter list) ,後面的大括弧區域為函數工作的程式碼區域,如果有定義回傳值型態,大括弧中至少要有一個 return 陳述 (statement) 。我們舉一例如下
int big(int a, int b) {
    if (a > b) {
        return a;
    }
    else {
        return b;
    }
}


big() 函數回傳兩個參數 (parameter) 中的較大值,我們可以看到回傳值型態為 int ,函數名稱為 big ,參數數量則是依需求自己定義,這裡為兩個 ab ,型態都是 int


此例用了兩個 return ,有回傳值的函數至少要有一個 returnreturn 就是函數結束執行,將控制權交還原本呼叫函數的地方。我們將 big() 寫成一個完整範例
#include <iostream>

using namespace std;

int big(int a, int b);

int main(void) {
    cout << endl;
    cout << big(22, 11) << " is bigger!" << endl;
    cout << endl;
    
    return 0;
}

int big(int a, int b) {
    if (a > b) {
        return a;
    }
    else {
        return b;
    }
}

/* 《程式語言教學誌》的範例程式
    http://pydoing.blogspot.com/
    檔名:bigdemo.cpp
    功能:示範 C++ 程式 
    作者:張凱慶
    時間:西元 2012 年 10 月 */


第 5 行為 big() 函數的宣告 (declaration) ,宣告亦為一行陳述,因此結尾要加分號
int big(int a, int b);


函數也可以不經宣告直接定義,但是函數定義就得放在 main() 之前。


我們在 main() 中呼叫 big() ,當 big() 執行完會在回到原本呼叫的地方,由於 big() 回傳一個整數,因此這裡就會直接印出 big() 的回傳值
cout << big(22, 11) << " is bigger!" << endl;


編譯後執行,結果如下



函數常見的運用為重複性質的工作,我們另舉一例如下
#include <iostream>

using namespace std;

void printInt(int a);
void printNewline(void);

int main(void) {
    int i = 10;
    
    printNewline();
    while (i > 0) {
        printInt(i);
        i--;
    }
    printNewline(); 
    
    return 0;
}

void printInt(int a) {
    cout << a << endl;
} 

void printNewline(void) {
    cout << endl;
} 

/* 《程式語言教學誌》的範例程式
    http://pydoing.blogspot.com/
    檔名:printdemo.cpp
    功能:示範 C++ 程式 
    作者:張凱慶
    時間:西元 2012 年 10 月 */


這是我們之前寫過的倒數計時程式,只是將印出的工作定義給函數,這裡可以看到函數名稱可以使程式有清楚的語意
printNewline();
while (i > 0) {
    printInt(i);
    i--;
}
printNewline();


編譯執行的結果是一樣的



雖然函數已經很好用了,可是 C++ 還允許程式設計師定義自己物件 (object) ,也就是設計類別 (class) 。接下來,我們來看看物件的模板,類別吧!


中英文術語對照
函數function
程式program
回傳值型態return type
參數列parameter list
陳述statement
參數parameter
宣告declaration
物件object
類別class


您可以繼續參考
基礎篇


相關目錄
回 C++ 入門指南
回 C++ 教材目錄
回首頁


參考資料
http://www.cplusplus.com/doc/tutorial/functions/
http://www.cplusplus.com/doc/tutorial/functions2/

3 則留言:

bendwarn 提到...

下面"物件的模板類別"是function的連結,選擇底下的"迴圈"也是連回選擇,建議檢查一下網頁連結喔。

bendwarn 提到...

或者其實是想玩迴圈梗?XD因為我發現C#也一樣。

Kaiching Chang 提到...

忘了加入網址 xd ,已修改,感謝指正 :)