c++設計一個無法被繼承的類


要求是該類不能被繼承,但是能夠像正常的類一樣使用。那么一下方法就不符合題目要求:

1、構造函數和析構函數設置為private。這樣就不能定義一個類的實例

2、類似於singleton模式那樣,定義一個靜態函數(或友元函數)來生成類的實例。這樣只能通過new在堆上創建類

 

可以如下設計這個類

class Base
{
private:
    Base() {}
    ~Base() {}
    friend class FinalClass;
};

class FinalClass : virtual public Base
{
};

int  main()
{
    FinalClass  *p = new FinalClass;  //堆上對象
    FinalClass  fs;                 //棧上對象
}

 

(1)FinalClass 是Base的友元,因此FinalClass可以訪問Base中設置為private的構造函數和析構函數,因此FinalClass可以被構造                                                本文地址

(2)如果有某個類X嘗試去繼承FinalClass,那么X在構造的時候必須要構造Base,並且由於是FinalClass是虛擬繼承自Base,X不能通過FinalClass的構造函數來構造Base,它必須直接構造Base,但是由於Base的構造函數是private的,所以X不能被構造

 

在c++11中引入了關鍵字final,可以更簡單的實現,這樣FinalClass就不能被繼承了

class FinalClass final
    {
    };

 

【版權聲明】轉載請注明出處:http://www.cnblogs.com/TenosDoIt/p/3641943.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM