用C++实现不能被继承的类
2014-03-16 11:52
148 查看
C++中没有自己定义这样一个类,需要自己实现。
(1)将构造函数设为私有
不能被继承,则可以将构造函数和析构函数定义为private,这样有个问题,我们也不能新建一个此类的变量。
可以使用static来新建和释放内存。如下示例:
(2)使用虚拟继承和友元
将一个类A的构造析构函数定义为private;
定义子类B是A的友元;
子类B虚拟继承(virtual public)A;
这样定义的效果是可以创建B的实例但是不能被继承,如果被子类C继承,则C会跳过B自己来创建A,而C不能访问A的构造和析构函数;
如果不采用虚拟继承,public时,C类会构造B,B类来创建A,此时B是可以被继承的。
也可以采用模板的方式如下:
(1)将构造函数设为私有
不能被继承,则可以将构造函数和析构函数定义为private,这样有个问题,我们也不能新建一个此类的变量。
可以使用static来新建和释放内存。如下示例:
class SealedClass0 { public: static SealedClass0* GetInstance() { return new SealedClass0(); } static void DeleteInstance( SealedClass0* pInstance) { delete pInstance; } private: SealedClass0() {} ~SealedClass0() {} };
(2)使用虚拟继承和友元
将一个类A的构造析构函数定义为private;
定义子类B是A的友元;
子类B虚拟继承(virtual public)A;
这样定义的效果是可以创建B的实例但是不能被继承,如果被子类C继承,则C会跳过B自己来创建A,而C不能访问A的构造和析构函数;
如果不采用虚拟继承,public时,C类会构造B,B类来创建A,此时B是可以被继承的。
class SealedClass1; class MakeSealed1 { friend SealedClass1; private: MakeSealed1() {} ~MakeSealed1() {} }; class SealedClass1 : virtual public MakeSealed1 { public: SealedClass1() {} ~SealedClass1() {} };
也可以采用模板的方式如下:
template <typename T> class MakeSealed { friend T; private: MakeSealed() {} ~MakeSealed() {} }; class SealedClass2 : virtual public MakeSealed<SealedClass2> { public: SealedClass2() {} ~SealedClass2() {} };
相关文章推荐
- C++ 中不能被继承的类实现,及从中体现virtual 继承的一个特性
- 用C++实现一个不能被继承的类
- C++实现不能被继承的类——终结类
- 面试题:C++实现一个不能被继承的类
- 【c++】实现一个不能被继承的类
- C++实现不能被继承的类的两种方法
- C++实现不能被继承的类——终结类
- 用C++实现一个不能被继承的类
- C++中不能被继承的类的实现
- C++实现不能继承的类
- 用C++实现一个不能被继承的类
- c++中如何实现一个不能被继承的类
- 用C++实现一个不能被继承的类
- 用C++设计一个不能被继承的类实现java final的作用
- C++实现不能被继承的类实例分析
- 用C++实现一个不能被继承的类
- 用C++实现一个不能被继承的类
- C++实现不能被继承的类
- C++实现一个不能被继承的类
- 如何实现不能被继承的C++的类,且能正常使用