Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Hàm tạo ảo (Virtual Constructor) trong C++

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

Trong C++, hàm tạo (constructor) không thể là ảo, vì khi hàm tạo của một lớp được thực thi, chưa có bảng ảo (virtual table) trong bộ nhớ, nghĩa là con trỏ ảo chưa được định nghĩa. Do đó, hàm tạo phải luôn là non-virtual.

Nhưng hàm hủy ảo (virtual destructor) là có thể.

Mã 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;
}

Kết quả đầu ra

Constructing base
Constructing derived
Destructing derived
Destructing base