ที่นี่เราจะดู Class internals ก่อนหน้านั้นเราจะดู Default constructors ซึ่งเกี่ยวข้องกับ internals Default constructor คือ constructor หนึ่ง (ที่ผู้ใช้นิยามหรือคอมไพเลอร์) ที่ไม่รับอาร์กิวเมนต์ใดๆ ตอนนี้คำถามคือ ทำไมต้องใช้ default constructor?
ถ้าไม่ให้ default constructor คอมไพเลอร์จะประกาศ default constructor โดยนัย (implicitly) Default constructors ใช้เพื่อเริ่มต้นค่าบางอย่างของ class internals จะไม่ส่งผลต่อ data member ของคลาส คอมไพเลอร์แทรก default constructor ในบางสถานการณ์ สมมติคลาสหนึ่งสืบทอดมาจากอีกคลาสที่มี default constructor หรือคลาสหนึ่งมีอ็อบเจ็กต์ของคลาสอื่นที่มี default constructor คอมไพเลอร์จะแทรกโค้ดเพื่อเรียก default constructor สำหรับ base class หรืออ็อบเจ็กต์ที่วางอยู่ภายในอ็อบเจ็กต์ปัจจุบัน
มาดูโค้ดตัวอย่างหนึ่งเพื่อเข้าใจแนวคิด
ตัวอย่าง
#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 constructor, 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 constructor 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 constructor for ClassD Constructor