委托構造函數是 C++11 引入的特性,允許一個構造函數在同一個類中調用另一個構造函數來完成初始化工作。這能減少代碼重複,提高可維護性。例如,一個類可以定義一個「主構造函數」接受所有參數,其他構造函數則透過委托調用它並提供預設值。
class Sales_data {
public:
// 主構造函數:完整初始化
Sales_data(std::string s, unsigned cnt, double rev)
: bookNo(s), units_sold(cnt), revenue(rev * cnt) {}
// 委托構造函數:使用預設值
Sales_data() : Sales_data("", 0, 0) {}
Sales_data(std::string s) : Sales_data(s, 0, 0) {}
Sales_data(std::istream &is) : Sales_data() { read(is, *this); }
private:
std::string bookNo;
unsigned units_sold = 0;
double revenue = 0.0;
};
許多初學者在編寫委托構造函數時,會遇到編譯器報錯:Sales_data 不是 "Sales_data" 類的非靜態數據成員或基類。這通常是因為編譯器不支持 C++11 或未啟用 C++11 標準。
-std=c++11 編譯選項ISO C++11 標準 (/std:c++11)掌握委托構造函數能讓類的初始化邏輯更清晰,配合 C++11 的其他特性(如列表初始化、預設成員初始化),能編寫出更現代、更安全的 C++ 代碼。