【面试题048】不能继承的类
题目:
用C++定义一个不可以被继承的类。
思路一:
把构造函数设为私有的函数。
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
#include <iostream>
using namespace std; class SealedClass1 { public: static SealedClass1 *GetInstance() { return new SealedClass1(); } static void DeleteInstance(SealedClass1 *pInstance) { delete pInstance; } private: SealedClass1() {} ~SealedClass1() {} }; class Try1 : public SealedClass1 { public: Try1() {} ~Try1() {} }; int main() { return 0; } |
思路二:
利用虚继承。
实现一个与一般的类型相比除了不能被继承之外其他用法都一样的类型。
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
#include <iostream>
using namespace std; template <typename T> class MakeSealed { friend T; private: MakeSealed() {} ~MakeSealed() {} }; class SealedClass2 : virtual public MakeSealed<SealedClass2> { public: SealedClass2() {} ~SealedClass2() {} }; // 如果试图从SealedClass1继承出新的类型, // 将会导致编译错误。 //class Try2 : public SealedClass2 //{ //public: // Try2() {} // ~Try2() {} //}; int main() { return 0; } |