Hàm ảo (virtual function) trong C++ dùng để tạo danh sách con trỏ lớp cơ sở và gọi phương thức của bất kỳ lớp dẫn xuất nào mà không cần biết loại đối tượng dẫn xuất. Hàm ảo được giải quyết muộn, tại thời gian chạy (runtime).
Nếu một hàm ảo trong lớp cơ sở được khai báo như một hàm thành viên, nó trở thành ảo trong mọi lớp dẫn xuất từ lớp cơ sở đó. Vì vậy, việc sử dụng từ khóa virtual không bắt buộc trong lớp dẫn xuất khi khai báo lại các phiên bản định nghĩa lại của hàm ảo cơ sở.
Mã ví dụ
#include <iostream>
using namespace std;
class B {
public:
virtual void s() {
cout << " In Base \n";
}
};
class D: public B {
public:
void s() {
cout << "In Derived \n";
}
};
int main(void) {
D d; // Đối tượng của lớp D
B *b = &d; // Con trỏ kiểu B* trỏ đến d
b->s(); // In "D::s() called"
return 0;
}
Kết quả đầu ra
In Derived