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

C++ Primer 學習筆記 51:類與數據抽象 —— 構造函數(上)

     編輯:C++ 入門

構造函數基礎

構造函數是類的特殊成員函數,用於初始化類對象。特點:

  • 名稱與類名相同。
  • 無返回類型(連 void 也不能寫)。
  • 可重載(參數列表不同)。
  • 對象創建時自動調用。

默認構造函數

若類未聲明任何構造函數,編譯器會合成一個默認構造函數:

  • 內置類型/複合類型成員:不初始化(值未定義)。
  • 類類型成員:調用其默認構造函數。
  • 數組成員:逐元素初始化。

⚠️ 內置類型成員不會自動初始化為 0,需顯式初始化。

構造函數初始值列表

在函數體執行之前初始化成員,語法:

ClassName::ClassName(params) : member1(val1), member2(val2) { /* 函數體 */ }

必須使用初始值列表的情況:

  1. const 成員。
  2. 引用成員。
  3. 無默認構造函數的類類型成員。

初始化順序按成員在類中聲明順序,而非列表順序(建議列表順序與聲明順序一致)。

explicit 構造函數

單參數構造函數隱式定義了從參數類型到類類型的隱式轉換。加上 explicit 關鍵字可禁止隱式轉換:

class String {
public:
    explicit String(int n); // 禁止 String s = 10;
};

委托構造函數 (C++11)

一個構造函數調用同類的另一個構造函數完成初始化:

class SalesData {
public:
    SalesData() : SalesData("", 0, 0) {} // 委托給三參數版本
    SalesData(string s) : SalesData(s, 0, 0) {}
    SalesData(string s, unsigned cnt, double price) { ... }
};

默認、拷貝、移動構造函數

類型參數用途
默認構造無參或全有默認值無參創建對象
拷貝構造const ClassName&從同類對象初始化
移動構造 (C++11)ClassName&&從右值初始化,資源轉移

若未聲明,編譯器會合成(逐成員拷貝/移動)。管理動態資源的類必須自定義(遵循三/五法則)。

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