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

Pure virtual function và Abstract Class trong C++


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