面试题48:不能被继承的类
来源:互联网 发布:第一台量子网络 编辑:程序博客网 时间:2024/05/21 18:31
学习了一段时间《剑指offer》现在做了一些笔试,现在陆续把笔记上传到博客,方便自己及他人上网查看。
题目:用C++ 设计一个不能被继承的类
常规解法:在C#中定义了关键字sealed,被这个关键字修饰的类不能被继承;在Java中同样也有关键字final,C++中没有类似的关键字,需要我们自己造轮子,在C++的子类的构造函数会自动调用父类的构造函数,析构函数也是如此,如果我们把它的构造函数和析构函数都定义为私有函数。
如果构造和析构都是私有,那么怎样才能得到该类的实例,可以通过定义共有的静态函数来创建和释放类的实例;
class A{public:static A* GetInstace(){return new A();}static void DeleteInstance(A* pA){delete pA;}private:A(){};~A(){};};
新奇的解法:利用虚拟继承,SealedClass2是MakeSealed的友元,所以可以调用私有函数。
template <typename T> class MakeSealed{friend T;private:MakeSealed(){ cout << "MakeSealed()" << endl; }~MakeSealed(){ cout << "~MakeSealed()" << endl; }};class SealedClass2 :virtual public MakeSealed<SealedClass2>{public:SealedClass2(){ cout << "SealedClass2()" << endl; }~SealedClass2(){ cout << "~SealedClass2()" << endl; }};
注意:在GCC中对friend的要求不同于VS目前最新的GCC中还不支持模板参数作为友元类型;
阅读全文
0 0
- [剑指offer][面试题48]不能被继承的类
- 面试题48:不能被继承的类
- 【面试题】剑指Offer-48-不能被继承的类
- 剑指offer 面试题48 不能被继承的类
- 面试题48:不能被继承的类
- - 。-创建不能被继承的类 一道面试题
- 面试题52:不能被继承的类
- 面试题28:不能被继承的类
- 面试题:C++实现一个不能被继承的类
- 剑指Offer面试题47不用加减乘除做加法(位运算),面试题48不能被继承的类(final)
- 剑指offer面试题48C++写一个不能被继承的类
- 剑指offer面试题48 C++写一个不能被继承的类
- 《剑指Offer》学习笔记--面试题48:不能被继承的类
- 【剑指offer】6.5发散思维能力——面试题48:不能被继承的类
- 剑指offer——面试题48:用C++设计一个不能被继承的类
- 程序员面试题精选(34):c++写不能被继承的类
- 程序员面试题精选100题(32)-不能被继承的类
- 程序员面试题精选100题(32)-不能被继承的类
- MBA改变了我的人生命运
- As提示警告:主版本52比51新的问题处理
- HDU 2519 新生晚会(组合问题)
- spring的事务处理
- 容器的扩展-1
- 面试题48:不能被继承的类
- 最近使用的matlab函数
- python 中字符串前加r的用处
- 小程序视图层wxml
- 中文分词基础中trie树的实现方式研究
- Docker 在Ubuntu环境的安装教程
- MySql查询表结构
- Android图表库MPAndroidChart(四)水平条行图
- Python中的random模块