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