Computer >> Máy Tính >  >> Lập trình >> C ++

Tại sao C ++ không có hàm tạo ảo?

Cơ chế ảo chỉ hoạt động khi chúng ta có một con trỏ lớp cơ sở đến một đối tượng lớp dẫn xuất.

Trong C ++, phương thức khởi tạo không thể là ảo, vì khi phương thức khởi tạo của một lớp được thực thi, không có bảng ảo nào trong bộ nhớ, có nghĩa là chưa có con trỏ ảo nào được định nghĩa. Vì vậy, hàm tạo phải luôn không ảo.

Nhưng trình hủy ảo là có thể. Đây là một ví dụ

Ví dụ

#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;
}

Đầu ra

Constructing base
Constructing derived
Destructing derived
Destructing base