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

ทำไม C++ ไม่มี Constructor แบบ Virtual?

กลไกเสมือน (virtual mechanism) ทำงานได้เฉพาะเมื่อเรามีพอยน์เตอร์คลาสฐานชี้ไปที่วัตถุคลาสลูก

ใน C++ Constructor ไม่สามารถเป็น virtual ได้ เพราะเมื่อ constructor ของคลาสถูก.execute ไม่มี virtual table ในหน่วยความจำ หมายถึงยังไม่มี virtual pointer ถูกกำหนด ดังนั้น constructor ควรเป็น non-virtual เสมอ

แต่ Destructor แบบ virtual เป็นไปได้ นี่คือตัวอย่าง

ตัวอย่าง

#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