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

C++ 類方法設計全解析:static、const、重載、默認參數與 inline

     編輯:C++ 入門

類的方法設計是 C++ 面向對象編程的核心。本文系統梳理五大類方法:靜態方法、常量方法、重載方法、默認參數、內聯方法,助你寫出高效、安全、可維護的代碼。

一、靜態方法:屬於類,不屬於對象

  • 聲明:static ReturnType Func(Params);
  • 無 this 指針,不能訪問非靜態成員;
  • 可訪問 private/protected 靜態數據成員;
  • 調用:ClassName::Func() 或對象.Func();
  • 不能聲明為 const:靜態方法本無對象,承諾不修改數據成員毫無意義。

本質上是帶作用域限制的普通函數。

二、常量方法:承諾不修改對象狀態

  • 聲明與定義均需加 const:double GetValue() const;
  • const 對象只能調用 const 方法;非 const 對象優先調用非 const 版本;
  • 析構函數不可聲明為 const(銷毀即修改);
  • 邏輯常量性:需在 const 方法中修改某些不影響對象可觀測狀態的成員(如訪問計數器),可用 mutable 關鍵字標記該成員。
class MyClass {
    mutable int accessCount_ = 0;
public:
    double GetValue() const { ++accessCount_; return value_; }
};

三、方法重載:同名不同參

  • 按參數列表區分(個數、類型、順序),不以返回類型區分;
  • const 可作為重載依據:void Foo(); void Foo() const;
  • C++11 = delete 可顯式禁用特定重載,防止隱式轉換導致的意外調用:
class MyClass {
public:
    void Foo(int i);
    void Foo(double) = delete;  // 禁用 double 版本
};

四、默認參數:簡化構造與調用

  • 只能從最右側連續提供默認值;
  • 構造函數中極其實用,可替代多個構造函數;
  • 陷阱:若同時提供「無參構造」和「全參數有默認值的構造」,調用 MyClass() 時編譯器會報二義性錯誤。

五、內聯方法:以空間換時間

  • 關鍵字 inline 或直接在類內定義;
  • 編譯器可選擇忽略(如函數體過大、包含循環/遞歸、虛函數等);
  • 優點:消除函數調用開銷,利於優化;
  • 缺點:代碼膨脹,增加可執行文件體積,可能導致指令緩存未命中;
  • 最佳實踐:僅用於極簡短、高頻調用的方法(如 Getter/Setter);定義放在頭文件中。

總結建議

  1. 不訪問非靜態成員 → static;
  2. 不修改對象狀態 → const(養成習慣);
  3. 需禁用隱式轉換 → = delete;
  4. 構造函數參數多 → 默認參數;
  5. 極簡高頻方法 → inline(類內定義即可)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved