預設建構函式、引數化建構函式、複製建構函式、解構函式

小马同学..3發表於2024-07-07

在C++程式語言中,建構函式和解構函式是用於管理物件生命週期的重要函式。以下是關於預設建構函式、引數化建構函式、複製建構函式和解構函式的詳細解釋及程式碼示例。

預設建構函式

預設建構函式是在沒有引數的情況下建立物件時呼叫的建構函式。如果使用者沒有定義任何建構函式,編譯器會提供一個隱式預設建構函式。使用者也可以顯式定義預設建構函式。

示例程式碼:

#include <iostream>

class MyClass {
public:
    // 預設建構函式
    MyClass() {
        std::cout << "Default constructor called." << std::endl;
    }
};

int main() {
    MyClass obj; // 呼叫預設建構函式
    return 0;
}

3引數化建構函式

引數化建構函式是帶有引數的建構函式,用於在建立物件時進行初始化。

示例程式碼:

#include <iostream>

class MyClass {
private:
    int value;
public:
    // 引數化建構函式
    MyClass(int v) : value(v) {
        std::cout << "Parameterized constructor called with value: " << value << std::endl;
    }
};

int main() {
    MyClass obj(42); // 呼叫引數化建構函式
    return 0;
}

複製建構函式

複製建構函式用於透過另一個同型別的物件來初始化新物件。其形式通常為 ClassName(const ClassName &other)。如果不顯式定義,編譯器會生成一個預設的複製建構函式。

示例程式碼:

#include <iostream>

class MyClass {
private:
    int value;
public:
    // 引數化建構函式
    MyClass(int v) : value(v) {
        std::cout << "Parameterized constructor called with value: " << value << std::endl;
    }
    
    // 複製建構函式
    MyClass(const MyClass &other) : value(other.value) {
        std::cout << "Copy constructor called with value: " << value << std::endl;
    }
};

int main() {
    MyClass obj1(42);       // 呼叫引數化建構函式
    MyClass obj2 = obj1;    // 呼叫複製建構函式
    return 0;
}

3解構函式

解構函式用於在物件生命週期結束時執行清理操作。解構函式沒有引數,也沒有返回值,其名稱為類名前加 ~ 號。編譯器會自動呼叫解構函式。

示例程式碼:

#include <iostream>

class MyClass {
public:
    // 預設建構函式
    MyClass() {
        std::cout << "Default constructor called." << std::endl;
    }
    
    // 解構函式
    ~MyClass() {
        std::cout << "Destructor called." << std::endl;
    }
};

int main() {
    MyClass obj; // 呼叫預設建構函式
    return 0;    // 在此處物件 `obj` 被銷燬,呼叫解構函式
}

結合示例
一個類中包含所有這些建構函式和解構函式的完整示例:

#include <iostream>

class MyClass {
private:
    int value;
public:
    // 預設建構函式
    MyClass() : value(0) {
        std::cout << "Default constructor called." << std::endl;
    }
    
    // 引數化建構函式
    MyClass(int v) : value(v) {
        std::cout << "Parameterized constructor called with value: " << value << std::endl;
    }
    
    // 複製建構函式
    MyClass(const MyClass &other) : value(other.value) {
        std::cout << "Copy constructor called with value: " << value << std::endl;
    }
    
    // 解構函式
    ~MyClass() {
        std::cout << "Destructor called." << std::endl;
    }
};

int main() {
    MyClass obj1;           // 呼叫預設建構函式
    MyClass obj2(42);       // 呼叫引數化建構函式
    MyClass obj3 = obj2;    // 呼叫複製建構函式
    return 0;               // 程式結束時依次呼叫解構函式
}

在上述程式碼中,演示瞭如何定義和使用預設建構函式、引數化建構函式、複製建構函式和解構函式。每個建構函式和解構函式在建立和銷燬物件時都會被呼叫,列印相應的訊息以示區別。

相關文章