在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; // 程式結束時依次呼叫解構函式
}
在上述程式碼中,演示瞭如何定義和使用預設建構函式、引數化建構函式、複製建構函式和解構函式。每個建構函式和解構函式在建立和銷燬物件時都會被呼叫,列印相應的訊息以示區別。