首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> C++ 入門

C++ 函數完整指南:定義、宣告、呼叫慣例、參數傳遞、預設參數與重載

     編輯:C++ 入門

C++ 函數完整指南:定義、宣告、呼叫與進階特性

函數 是執行特定任務的語句群組。每個 C++ 程式至少有一個 main() 函數。良好的函數設計遵循「單一職責」原則,每個函數只做一件事。

函數定義結構

回傳型別 函數名(參數列表) {
    函數主體
    return 回傳值;  // void 型別可省略
}

四大組成要素:

  • 回傳型別:資料型別或 void(無回傳)。
  • 函數名:標識符,與參數列表構成簽名。
  • 參數列表:型別、順序、數量;可為空。
  • 函數主體:實作邏輯的語句區塊。

範例:max 函數

int max(int num1, int num2) {
    int result;
    if (num1 > num2) result = num1;
    else result = num2;
    return result;
}

函數宣告(原型)

告知編譯器函數介面,實作可分離於不同檔案:

int max(int num1, int num2);  // 參數名可省略:int max(int, int);

跨檔案呼叫時,於呼叫端檔案頂部包含宣告(通常置於標頭檔 .h/.hpp)。

函數呼叫與控制流

#include <iostream>
using namespace std;

int max(int, int);  // 宣告

int main() {
    int a = 100, b = 200;
    int ret = max(a, b);  // 呼叫,控制權轉移
    cout << "Max: " << ret << endl;
    return 0;
}

int max(int num1, int num2) {  // 定義
    return (num1 > num2) ? num1 : num2;
}

呼叫時:實參複製/綁定給形參 → 執行主體 → return 或遇右大括號 → 控制權返回呼叫端。

參數傳遞三種模式

模式語法特性適用場景
傳值void f(int x)複製實參,函數內修改不影響外部小型型別、唯讀輸入
指標傳遞void f(int *p)傳遞位址,可修改實參,可為 nullptr需修改實參、C 風格介面、可選參數
參考傳遞void f(int &r)實參別名,必須綁定合法物件,語法簡潔需修改實參、大型物件唯讀(const T&)

C++ 預設為傳值呼叫。大型物件唯讀請用 const T& 避免複製。

預設參數

為尾部參數提供預設值,呼叫時可省略:

int sum(int a, int b = 20) { return a + b; }

sum(10, 5);  // 15
sum(10);     // 30,使用預設 b=20

規則:只有尾部參數可有預設值,且宣告與定義僅一處指定(通常在宣告)。

函數重載

同名函數,參數列表不同(型別、數量、順序)。回傳型別不同不構成重載。

void print(int i)    { cout << "int: "    << i << endl; }
void print(double d) { cout << "double: " << d << endl; }
void print(const char* s) { cout << "string: " << s << endl; }

內聯函數

建議編譯器在呼叫點展開函數本體,減少呼叫開銷:

inline int square(int x) { return x * x; }

適用於簡短、高頻呼叫的函數;遞迴、複雜流程控制、虛函數通常不內聯。現代編譯器優化積極,inline 僅為建議。

遞迴函數

函數直接/間接呼叫自身。需有基底情況終止遞迴。

unsigned long long factorial(unsigned n) {
    return (n == 0) ? 1 : n * factorial(n - 1);
}

Lambda 運算式 (C++11)

匿名函數物件,支援捕獲外部變數:

auto add = [](int a, int b) { return a + b; };
cout << add(3, 4);  // 7

int factor = 10;
auto scale = [factor](int x) { return x * factor; };  // 值捕獲

總結

  • 函數是模組化基石,善用參考傳遞與const 正確性。
  • 重載簡化介面,預設參數減少樣板碼。
  • 現代 C++ 偏好 std::function、Lambda、演算法替代傳統函數指標。
  • 避免過長函數,單一職責、命名清晰、單元測試友善。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved