溫馨提示×

C++構(gòu)造函數(shù)有何特殊類型

c++
小樊
81
2024-11-09 00:26:35
欄目: 編程語言

C++構(gòu)造函數(shù)是一種特殊的成員函數(shù),用于初始化對象的狀態(tài)

  1. 默認(rèn)構(gòu)造函數(shù):當(dāng)沒有為類定義任何構(gòu)造函數(shù)時,編譯器會自動生成一個默認(rèn)構(gòu)造函數(shù)。默認(rèn)構(gòu)造函數(shù)不接受任何參數(shù),并且不執(zhí)行任何操作。如果類中沒有數(shù)據(jù)成員,那么默認(rèn)構(gòu)造函數(shù)什么也不做。
class MyClass {
    // 編譯器將自動生成一個默認(rèn)構(gòu)造函數(shù)
};
  1. 參數(shù)化構(gòu)造函數(shù):這種構(gòu)造函數(shù)接受一個或多個參數(shù),用于初始化類的數(shù)據(jù)成員??梢杂卸鄠€參數(shù)化構(gòu)造函數(shù),它們具有不同的參數(shù)列表。這種情況下,編譯器不會自動生成默認(rèn)構(gòu)造函數(shù)。
class MyClass {
public:
    int x;
    int y;

    MyClass(int a, int b) {
        x = a;
        y = b;
    }
};
  1. 拷貝構(gòu)造函數(shù):這種構(gòu)造函數(shù)用于初始化一個對象,將其初始化為另一個同類型對象的副本??截悩?gòu)造函數(shù)接受一個同類型對象的引用作為參數(shù)。
class MyClass {
public:
    int x;
    int y;

    MyClass(const MyClass& other) {
        x = other.x;
        y = other.y;
    }
};
  1. 拷貝賦值運算符:這種運算符用于將一個對象賦值給另一個同類型對象??截愘x值運算符接受一個同類型對象的引用作為參數(shù)。
class MyClass {
public:
    int x;
    int y;

    MyClass& operator=(const MyClass& other) {
        if (this != &other) {
            x = other.x;
            y = other.y;
        }
        return *this;
    }
};
  1. 移動構(gòu)造函數(shù):這種構(gòu)造函數(shù)用于初始化一個對象,將其初始化為另一個同類型對象的右值引用。移動構(gòu)造函數(shù)接受一個同類型對象的右值引用作為參數(shù)。
class MyClass {
public:
    int x;
    int y;

    MyClass(MyClass&& other) noexcept {
        x = other.x;
        y = other.y;
        other.x = 0;
        other.y = 0;
    }
};
  1. 移動賦值運算符:這種運算符用于將一個對象賦值給另一個同類型對象的右值引用。移動賦值運算符接受一個同類型對象的右值引用作為參數(shù)。
class MyClass {
public:
    int x;
    int y;

    MyClass& operator=(MyClass&& other) noexcept {
        if (this != &other) {
            x = other.x;
            y = other.y;
            other.x = 0;
            other.y = 0;
        }
        return *this;
    }
};

這些特殊類型的構(gòu)造函數(shù)在對象創(chuàng)建時自動調(diào)用,以確保對象以正確的狀態(tài)初始化。

0