ที่นี่เราจะเห็นคลาสภายใน ก่อนหน้านั้นเราจะเห็น 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