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

Mô phỏng final class (lớp không thể kế thừa) trong C++


C++ không có từ khóa final cho class (trước C++11). Kỹ thuật dùng virtual inheritance + private constructor của lớp helper.

Cơ chế

  1. Tạo class MakeFinal với constructor private, friend class FinalClass.
  2. FinalClass kế thừa virtual MakeFinal.
  3. Lớp con cố gắng kế thừa FinalClass phải gọi constructor MakeFinal (do virtual base) → lỗi truy cập private.

Ví dụ

class FinalClass; // forward

class MakeFinal {
private: MakeFinal() { cout << "MakeFinal ctor\n"; }
friend class FinalClass;
};

class FinalClass : virtual MakeFinal {
public: FinalClass() { cout << "FinalClass ctor\n"; }
};

// class Derived : FinalClass { // LỖI: không truy cập MakeFinal::MakeFinal()
    // Derived() { cout << "Derived ctor\n"; }
};

int main() {
    FinalClass obj; // OK
    // Derived d;   // Compile error
}

C++11 trở đi: dùng class FinalClass final { ... };.