C++ 建構函式
建構函式是 C++ 中一種特殊的成員函式,當建立類物件時自動呼叫。它用於初始化物件的狀態,例如為屬性分配初始值。建構函式與類同名,且沒有返回值型別。
建構函式型別
C++ 支援多種型別的建構函式,用於滿足不同的初始化需求:
- 預設建構函式: 不帶引數的建構函式,通常用於初始化物件的預設狀態。
- 帶引數建構函式: 允許傳入引數來初始化物件的狀態。
- 複製建構函式: 用於從另一個已存在的物件建立新物件。
- 移動建構函式: 用於從即將銷燬的臨時物件轉移資源到新物件。
預設建構函式
預設建構函式是最簡單的建構函式,不接受任何引數。它通常用於為物件的屬性設定預設值,或者執行簡單的初始化操作。
class Person {
public:
string name;
int age;
Person() { // 預設建構函式
name = "Unknown";
age = 0;
}
};
int main() {
Person p1; // 建立 Person 物件
cout << p1.name << ", " << p1.age << endl; // 輸出:Unknown, 0
return 0;
}
帶引數建構函式
帶引數建構函式允許傳入引數來初始化物件的狀態。引數可以是任何有效的 C++ 資料型別,包括基本型別、自定義類物件和指標。
class Car {
public:
string brand;
string model;
int year;
Car(string b, string m, int y) { // 帶引數建構函式
brand = b;
model = m;
year = y;
}
};
int main() {
Car car1("Ford", "Mustang", 1967); // 建立 Car 物件並傳入引數
cout << car1.brand << " " << car1.model << " " << car1.year << endl; // 輸出:Ford Mustang 1967
return 0;
}
複製建構函式
複製建構函式用於從另一個已存在的物件建立新物件。它通常用於複製另一個物件的屬性值,而不共享原始物件的資料。
class Person {
public:
string name;
int age;
Person(const Person& other) { // 複製建構函式
name = other.name;
age = other.age;
}
};
int main() {
Person p1("Alice", 30); // 建立 Person 物件
Person p2(p1); // 複製建構函式建立 p2
cout << p2.name << ", " << p2.age << endl; // 輸出:Alice, 30
return 0;
}
移動建構函式
移動建構函式用於從即將銷燬的臨時物件轉移資源到新物件。它通常用於避免不必要的資源複製,並提高效能。
class Person {
public:
string name;
int age;
Person(Person&& other) { // 移動建構函式
name = std::move(other.name);
age = other.age;
// 將 other 的資源轉移到 this
}
};
int main() {
Person p1("Bob", 25); // 建立 Person 物件
Person p2(std::move(p1)); // 移動建構函式建立 p2
cout << p2.name << ", " << p2.age << endl; // 輸出:Bob, 25
cout << p1.name << ", " << p1.age << endl; // 輸出:, 0 (p1 的資源已轉移)
return 0;
}
建構函式的訪問控制
建構函式的訪問許可權可以使用訪問控制修飾符來控制,例如 public
、private
和 protected
。
public
:建構函式可以在類外部的任何地方呼叫。private
:建構函式只能在類的內部呼叫。protected
:建構函式可以在類的內部或其子類中呼叫。
總結
建構函式是 C++ 中重要的物件導向程式設計機制,用於初始化和管理物件的狀態。透過理解不同型別的建構函式及其用法,您可以建立健壯且可維護的 C++ 程式碼。
最後
為了方便其他裝置和平臺的小夥伴觀看往期文章:
微信公眾號搜尋:Let us Coding
,關注後即可獲取最新文章推送
看完如果覺得有幫助,歡迎點贊、收藏、關注