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

C++ 函數完整教程:定義、調用、重載、模板、默認參數、遞歸與內聯

     編輯:C++ 入門

C++ 函數完整教程:定義、調用、重載、模板、默認參數、遞歸與內聯

函數基礎

  • 程序模塊化核心,主函數調度各功能函數
  • 庫函數(系統提供)vs 用戶自定義函數
  • 無參函數 / 有參函數(數據傳遞)

定義與聲明

// 定義
int max(int x, int y) { int z = x>y?x:y; return z; }
// 聲明/原型(通常置於文件頂部或頭文件)
int max(int, int); // 或 int max(int x, int y);

聲明使編譯器能檢查調用合法性;定義在調用前可省略聲明。

參數傳遞:值傳遞

  • 形參分配臨時存儲,實參值拷貝給形參
  • 形參修改不影響實參
  • 類型不匹配時按賦值規則隱式轉換

返回值

  • return expr; 帶回值,類型按函數聲明轉換
  • 無返回值用 void

調用方式

  • 函數語句:printStar(); 不用返回值
  • 函數表達式:c = 2 * max(a,b); 參與運算
  • 函數參數:max(a, max(b,c)); 嵌套調用

內聯函數 inline

  • 編譯時將函數體嵌入調用點,省去調用開銷
  • 適用:短小(≤5 語句)、高頻調用、無復雜控制流
  • 建議性關鍵字,編譯器可忽略
  • 聲明與定義處均可加 inline

函數重載

  • 同名、參數列表不同(個數/類型/順序)
  • 返回類型不同不構成重載
  • 編譯器按實參匹配最佳版本
  • 語義應相關,避免濫用

函數模板

template 
T max(T a, T b, T c) {
    if (b > a) a = b;
    if (c > a) a = c;
    return a;
}
  • 類型參數化,適用函數體相同、參數個數固定、類型變化場景
  • 編譯器實例化生成具體類型版本
  • 比重載更簡潔,但不適用參數個數不同情況

默認參數

float area(float r = 6.5); // 聲明處給默認值
area();    // 等價 area(6.5)
area(7.5); // 使用 7.5
  • 默認參數必須靠右(從右向左綁定)
  • 不可與重載同時使用(產生二義性)
  • 定義在前給定義,聲明在前給聲明

遞歸函數

  • 直接遞歸:f() 調用 f()
  • 間接遞歸:f1()→f2()→f1()
  • 必須有終止條件(if 控制)
  • 例子:階乘 n! = n*(n-1)!、年齡問題 age(n)=age(n-1)+2
  • 優點:代碼簡潔符合直覺;缺點:棧開銷大

嵌套調用與聲明

  • C++ 不允許嵌套定義(函數內定義函數)
  • 但允許嵌套調用,調用前需聲明所有被調函數
  • 習慣將所有聲明集中文件頂部

實戰案例:弦截法求根

方程 f(x)=x³-5x²+16x-80=0,函數分工:
f(x) 計算函數值,xpoint(x1,x2) 求弦與 x 軸交點,root(x1,x2) 迭代求根。
展示了函數分解、聲明、遞歸調用的完整流程。

掌握函數定義、重載、模板、默認參數、遞歸、內聯等機制,是編寫模塊化、可復用、高性能 C++ 代碼的基石。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved