面试题48:用C++设计一个不能被继承的类
2015-06-25 17:18
169 查看
解法一:把构造函数设为私有
将构造函数定义为私有,然后通过定义公有的静态函数来创建和释放类的实例。
缺点:只能得到位于堆上的实例,得不到位于栈上的实例。
解法二:利用虚拟继承
SealedClass2是不能被继承的类。当一个类试图继承它时,在调用该类的构造函数时会直接跳过SealedClass2而直接调用MakeSealed的构造函数,因此会出现编译错误。
将构造函数定义为私有,然后通过定义公有的静态函数来创建和释放类的实例。
class SealedClass 1 { public: static SealedClass1* GetInstance() { return new SealedClass1(); } static void DeleteInstance( SealedClass1* pInstance) { delete pInstance; } private: SealedClass1(); ~SealedClass1(){} }
缺点:只能得到位于堆上的实例,得不到位于栈上的实例。
解法二:利用虚拟继承
class MakeSealed { friend SealedClass2; private: MakeSealed(); ~MakeSealed(); }; class SealedClass2:virtual public MakeSealed { public: SealedClass2(){} ~SealedClass2(){} };
SealedClass2是不能被继承的类。当一个类试图继承它时,在调用该类的构造函数时会直接跳过SealedClass2而直接调用MakeSealed的构造函数,因此会出现编译错误。
相关文章推荐
- 进程、线程同步互斥学习 —— 信号量
- C++/C笔试面试题目大大的集合
- C++语言债券系列之十一——友元函数和拷贝构造函数
- C++模板
- Java调用c++的方法
- 学习C++ 模板类
- 指针
- C++ stringstream 用法
- gdb调试c++的STL容器
- C++入门学习——标准模板库之vector
- Effective C++ 条款19
- Effective C++ 条款18
- C++获取文件路径
- 值得推荐的C/C++框架和库
- 经典开源C/C++项目
- vs2010 C++常见问题1:back_inserter
- 搭建Eclipse C/C++开发环境
- Unreal Engine4 C++基础代码项目编译失败原因小结
- C语言文件操作
- 网狐_经典版机器人添加说明