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ế
- Tạo class
MakeFinalvới constructor private, friend classFinalClass. FinalClasskế thừavirtual MakeFinal.- Lớp con cố gắng kế thừa
FinalClassphải gọi constructorMakeFinal(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 { ... };.