Bảng so sánh:
| Virtual Function | Pure Virtual Function |
|---|---|
| Có định nghĩa (body) trong lớp cơ sở | Không có định nghĩa (chỉ khai báo) |
Khai báo: virtual void f() { ... } | Khai báo: virtual void f() = 0; |
| Lớp có virtual function vẫn khởi tạo được | Lớp chứa pure virtual thành abstract class, không khởi tạo được |
| Lớp dẫn xuất có thể ghi đè hoặc không | Lớp dẫn xuất bắt buộc ghi đè, nếu không cũng thành abstract |
Ví dụ Virtual Function
class Base { public: virtual void f() { cout << "Base\n"; } };
class Derived : public Base { public: void f() override { cout << "Derived\n"; } };
// Base* b = new Derived; b->f(); // "Derived"
Ví dụ Pure Virtual Function
class Base { public: virtual void f() = 0; }; // Abstract
class Derived : public Base { public: void f() override { cout << "Derived\n"; } };
// Base* b = new Derived; b->f(); // "Derived"