C++ 構造函數 構造函數是 C++ 中一種特殊的成員函數,當創建類對象時自動調用。它用於初始化對象的狀態,例如為屬性分配初始值。構造函數與類同名,且沒有返回值類型。 構造函數類型 C++ 支持多種類型的構造函數,用於滿足不同的初始化需求: 預設構造函數: 不帶參數的構造函數,通常用於初始化對象的默 ...
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
,關註後即可獲取最新文章推送
看完如果覺得有幫助,歡迎點贊、收藏、關註