Virtual function: có cài đặt mặc định ở base class, class con có thể override.
Pure virtual function (= 0): không có cài đặt ở base class, class con bắt buộc override. Class chứa pure virtual → abstract class, không thể tạo instance trực tiếp.
cpp
class Shape {
public:
virtual void draw() { std::cout << "Generic shape"; } // virtual — có default
virtual double area() = 0; // pure virtual — bắt buộc override
virtual ~Shape() {} // virtual destructor — bắt buộc khi có virtual method
};
class Circle : public Shape {
double r;
public:
Circle(double r) : r(r) {}
double area() override { return 3.14 * r * r; }
// draw() không override → dùng bản của Shape
};
Shape* c = new Circle(5);
c->area(); // Circle::area qua vtable