Pure virtual function: hàm ảo không có định nghĩa, khai báo virtual void f() = 0;. Abstract class: lớp chứa ít nhất một pure virtual function.
Đặc điểm Abstract Class
- Có thể có hàm thường và biến thành viên.
- Không thể khởi tạo đối tượng, nhưng có thể tạo con trỏ/tham chiếu kiểu abstract class.
- Dùng cho upcasting: cơ sở cung cấp interface, lớp dẫn xuất cài đặt.
- Lớp dẫn xuất phải cài đặt tất cả pure virtual functions, nếu không nó cũng thành abstract.
- Không tạo được object do vtable chưa hoàn chỉnh (slot pure virtual chưa có địa chỉ).
Ví dụ
#include <iostream>
using namespace std;
class Base { public: virtual void s() = 0; }; // Abstract
class Derived : public Base {
public:
void s() override { cout << "Virtual Function in Derived\n"; }
};
int main() {
Base *b = new Derived();
b->s(); // Đa hình qua con trỏ base
delete b;
return 0;
}
Kết quả
Virtual Function in Derived