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, bởi vì khi một phương thức khởi tạo của một lớp được thực thi thì 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 có thể sử dụng trình hủy ảo.
Mã mẫu
#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