首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> C++ 入門

C++ 實現 final 類(無 final 關鍵字)的技巧

     編輯:C++ 入門

C++98/03 時代如何禁止類被繼承

利用「虛基類構造函數私有 + 友元」技巧,可在無 final 關鍵字(C++11 引入)的編譯器上實現「不可繼承」的類。

核心代碼

class FinalParent {
protected:
    FinalParent() {}           // 構造函數 protected,僅派生類可訪問
    friend class FinalClass;   // 授權 FinalClass 可構造
};

class FinalClass : private virtual FinalParent {
    int num;
public:
    FinalClass() { num = 5; }
    void show() { cout << num << endl; }
};

原理解析

  1. FinalParent 構造函數 protected,外部無法直接構造,只有派生類能調用。
  2. FinalClass 以 private virtual 繼承 FinalParent,並被聲明為 friend,因此 FinalClass 可構造虛基類子對象。
  3. 若嘗試繼承 FinalClass(如 class Derived : public FinalClass),Derived 需構造虛基類 FinalParent,但 Derived 不是 FinalParent 的友元,編譯報錯。

注意事項

  • 虛繼承確保最派生類負責構造虛基類,觸發訪問檢查。
  • C++11 後請直接使用 class FinalClass final,更簡潔明確。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved