ที่นี่เราจะเห็นคลาสภายใน ก่อนหน้านั้นเราจะเห็น Default constructors ซึ่งเกี่ยวข้องกับ internals คอนสตรัคเตอร์เริ่มต้นคือคอนสตรัคเตอร์หนึ่งตัว (กำหนดโดยผู้ใช้หรือคอมไพเลอร์) ที่ไม่รับอาร์กิวเมนต์ใดๆ ตอนนี้คำถามก็มาถึง เหตุใดจึงใช้คอนสตรัคเตอร์เริ่มต้น
หากไม่ได้กำหนดคอนสตรัคเตอร์เริ่มต้น คอมไพเลอร์จะประกาศคอนสตรัคเตอร์เริ่มต้นโดยปริยาย ตัวสร้างเริ่มต้นใช้เพื่อเริ่มต้นบางคลาสภายใน จะไม่ส่งผลกระทบต่อสมาชิกของคลาส คอมไพเลอร์แทรกคอนสตรัคเตอร์เริ่มต้นในบางสถานการณ์ที่แตกต่างกัน สมมติว่าคลาสมาจากคลาสอื่นที่มีคอนสตรัคเตอร์เริ่มต้น หรือคลาสหนึ่งที่ไม่มีอ็อบเจ็กต์ของคลาสอื่นที่มีคอนสตรัคเตอร์เริ่มต้น คอมไพเลอร์แทรกโค้ดเพื่อเรียกคอนสตรัคเตอร์เริ่มต้นสำหรับคลาสฐานหรืออ็อบเจ็กต์ที่วางอยู่ภายในอ็อบเจกต์ปัจจุบัน
ให้เราดูรหัสหนึ่งรหัสเพื่อรับแนวคิด
ตัวอย่าง
#include<iostream>
using namespace std;
class Base {
public:
// compiler will create one constructor for the class "Base"
};
class ClassA {
public:
ClassA(){
cout << "ClassA Constructor defined by user" << endl;
}
int x; //it will not be initialized
};
class ClassB : public ClassA {
//compiler will create ClassB constructor and add some code to call
ClassA constructor
};
class ClassC : public ClassA {
public:
ClassC() { //user defined consturctor, but compiler will add
code to call A constructor
cout << "User defined ClassC Constructor" << endl;
}
};
class ClassD {
public:
ClassD(){
// User defined default constructor. The compiler will add
code to call object of ClassA
cout << "User-defined consturctor for ClassD Constructor" <<
endl;
}
private:
ClassA obj;
};
int main() {
Base baseObj;
ClassB b;
ClassC c;
ClassD d;
} ผลลัพธ์
ClassA Constructor defined by user ClassA Constructor defined by user User defined ClassC Constructor ClassA Constructor defined by user User-defined consturctor for ClassD Constructor