Các hàm ảo trong C ++ sử dụng để tạo danh sách các con trỏ lớp cơ sở và gọi các 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 lớp dẫn xuất. Các chức năng ảo được giải quyết muộn, trong thời gian chạy.
Nếu một hàm ảo trong lớp cơ sở được khai báo là một hàm thành viên, nó sẽ 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 là không cần thiết trong lớp dẫn xuất trong khi khai báo các phiên bản được xác định lại của hàm lớp cơ sở ảo.
Mã mẫu
#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; // An object of class D B *b= &d; // A pointer of type B* pointing to d b->s(); // prints"D::s() called" return 0; }
Đầu ra
In Derived