C++ 建構函式實戰指南:預設構造、帶引數構造、複製構造與移動構造

小万哥丶發表於2024-04-22

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;
}

建構函式的訪問控制

建構函式的訪問許可權可以使用訪問控制修飾符來控制,例如 publicprivateprotected

  • public:建構函式可以在類外部的任何地方呼叫。
  • private:建構函式只能在類的內部呼叫。
  • protected:建構函式可以在類的內部或其子類中呼叫。

總結

建構函式是 C++ 中重要的物件導向程式設計機制,用於初始化和管理物件的狀態。透過理解不同型別的建構函式及其用法,您可以建立健壯且可維護的 C++ 程式碼。

最後

為了方便其他裝置和平臺的小夥伴觀看往期文章:

微信公眾號搜尋:Let us Coding,關注後即可獲取最新文章推送

看完如果覺得有幫助,歡迎點贊、收藏、關注

相關文章