Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

คอนสตรัคเตอร์เสมือน (Virtual Constructor) ใน C++


กลไกเสมือน (virtual mechanism) ทำงานได้ก็ต่อเมื่อเรามีพอยน์เตอร์ของคลาสฐาน (base class) ที่ชี้ไปยังออบเจ็กต์ของคลาสลูก (derived class)

ใน C++ คอนสตรัคเตอร์ไม่สามารถเป็นเสมือน (virtual) ได้ เนื่องจากเมื่อคอนสตรัคเตอร์ของคลาสถูกดำเนินการ ไม่มีตารางเสมือน (virtual table) ในหน่วยความจำ หมายถึงยังไม่มีพอยน์เตอร์เสมือน (virtual pointer) ถูกกำหนด ดังนั้น คอนสตรัคเตอร์ควรเป็น non-virtual เสมอ

แต่เดสตรัคเตอร์เสมือน (virtual destructor) เป็นไปได้

ตัวอย่างโค้ด

#include<iostream> using namespace std; class b {   public:     b() {       cout<<"Constructing base \n";     }     virtual ~b() {       cout<<"Destructing base \n";     } }; class d: public b {   public:     d() {       cout<<"Constructing derived \n";     }     ~d() {       cout<<"Destructing derived \n";     } }; int main(void) {   d *derived = new d();   b *bptr = derived;   delete bptr;   return 0; }

ผลลัพธ์

Constructing base Constructing derived Destructing derived Destructing base