Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Khác biệt giữa virtual function và pure virtual function trong C++


Bảng so sánh:

Virtual FunctionPure 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 đượcLớ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ôngLớ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"