如何防止類被繼承

方法有一下兩種:
1、將類後面加一個final關鍵字,最簡單;
2、利用私有構造函數,然後提供public的方法創建對象或者設定友元。
重點說說方法2:
(1)將構造函數設爲私有,提供public方法進行對象的創建,利用的是單例模式。
(2) 將構造函數設爲私有,通過設定友元來進行創建對象,其友元類爲子類,所以在創建對象時,需要調用父類的構造函數,因爲是友元,所以可以創建對象。但B就不行,因爲友元A只針對該一個類Usable_lock有效,對其他類或派生類(B)均無效,代碼如下:

class A;
class Usable_lock{
friend class A;
private:
   Usable_lock(){};
   Usable_lock(const Usable_lock){};
};
 //Usable_lock爲一個輔助實現的類
class A: public virtual Usable_lock{
public:
  A();
};
class B: public A
{
}; 
A a;  //可以正常定義對象
B b;  //error,... 派生類不可以定義對象。。。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章