在C++中,當你創建一個類的對象時,如果沒有提供任何構造函數,編譯器會自動為你提供一個默認構造函數。默認構造函數有以下幾種情況:
class MyClass {
// 編譯器自動生成的無參數默認構造函數
};
int main() {
MyClass obj; // 調用默認構造函數
return 0;
}
class MyClass {
public:
int x;
int y = 0; // y具有默認值0
// 編譯器自動生成的帶有一個整數參數的默認構造函數
MyClass(int a) : x(a) {}
};
int main() {
MyClass obj(5); // 調用帶有一個整數參數的默認構造函數,x被初始化為5
return 0;
}
class MyClass {
public:
int x;
int y = 0;
int z = 0; // z具有默認值0
// 編譯器自動生成的帶有三個整數參數的默認構造函數
MyClass(int a, int b = 0, int c = 0) : x(a), y(b), z(c) {}
};
int main() {
MyClass obj(5); // 調用帶有三個整數參數的默認構造函數,x被初始化為5,y和z被初始化為0
return 0;
}
總之,C++默認構造函數的調用方式取決于你提供的構造函數。如果你沒有為類定義任何構造函數,編譯器會自動為你提供一個默認構造函數。如果你定義了帶參數的構造函數,但沒有定義無參數構造函數,編譯器將不再提供默認構造函數,你需要在代碼中顯式地調用帶參數的構造函數。