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 runtime.
Việc sử dụng chính của hàm ảo là đạt được đa hình runtime (Runtime Polymorphism). Đa hình runtime chỉ có thể đạt được thông qua con trỏ (hoặc tham chiếu) kiểu lớp cơ sở. Ngoài ra, con trỏ lớp cơ sở có thể trỏ đến đối tượng của lớp cơ sở cũng như đối tượng của lớp dẫn xuất. Trong code trên, con trỏ lớp cơ sở 'b' chứa địa chỉ của đối tượng 'd' của lớp dẫn xuất.
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;
B *b = &d;
b->s();
return 0;
}
Kết quả đầu ra
In Derived