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

ทำไม C ++ ไม่มีคอนสตรัคเตอร์เสมือน


กลไกเสมือนจะทำงานก็ต่อเมื่อเรามีตัวชี้คลาสฐานไปยังออบเจกต์คลาสที่ได้รับ

ใน C++ คอนสตรัคเตอร์ไม่สามารถเป็นแบบเสมือนได้ เนื่องจากเมื่อคอนสตรัคเตอร์ของคลาสถูกเรียกใช้งาน ไม่มีตารางเสมือนในหน่วยความจำ หมายความว่ายังไม่มีการกำหนดตัวชี้เสมือน ดังนั้น คอนสตรัคเตอร์จึงไม่ควรเป็นแบบเสมือนเสมอ

แต่ตัวทำลายเสมือนนั้นเป็นไปได้ นี่คือตัวอย่าง

ตัวอย่าง

#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