面試中可能遇到讓設計一個沒法被繼承的類。最簡單的實現是將該類的構造函數設置爲私有的,而後經過靜態成員函數調用私有構造函數實例化對象,這樣的類確實不可繼承,可是使用起來很是不方便,必須使用靜態成員實例化對象,並且對象存儲在堆中,沒法像一個普通的類同樣的被使用。最佳的設計是結合私有構造函、友元、虛擬繼承實現。面試
1 class Simple{ 2 private: 3 Simple(){}; 4 ~Simple(){} 5 private: 6 static Simple* getInstance(){ 7 return new Simple(); 8 } 9 static void deleteInstance(Simple* instance){ 10 delete instance; 11 } 12 };
1 template<typename T> 2 class NoneInherit { 3 friend T; 4 private: 5 NoneInherit() { 6 } 7 ~NoneInherit() { 8 } 9 }; 10 11 class Finalclass: virtual public NoneInherit<Finalclass> { 12 public: 13 Finalclass() { 14 } 15 ~Finalclass() { 16 } 17 }; 18 19 //class TestClass: public Finalclass { 20 //};
關鍵點:函數