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