C++实现不能继承的类
2015-03-25 21:40 rangers 阅读(356) 评论(0) 编辑 收藏 举报实现一个不能继承的类,这在Java等语言中是很好实现的,被final关键字修饰的类不能被继承。
C++中没有类似的关键字,须自己实现。一般有如下两种方法:
1、设置构造方法与析构方法为私有
class FinalClass { public: static FinalClass * GetInstance() { return new FinalClass(); } static void DestoryInstance(FinalClass *pClass) { delete pClass; } private: FinalClass() { } virtual ~FinalClass() { } };
由于定义构造方法与析构方法为私有,所以必须定义static方法来创建和释放类的实例。
该方法的缺点:创建类的实例不方便,而且之间在堆上创建实例,而得不到栈上的实例。
2、使用虚拟继承实现
template <typename T> class MakeFinal { public: friend T; private: MakeFinal() { } virtual ~MakeFinal() { } }; class FinalClass2 : virtual public MakeFinal<FinalClass2> { public: FinalClass2() { } virtual ~FinalClass2() { } };
这样实现的话,FinalClass2就不能被继承,如果继承该类就会导致编译不过。而且可以像使用普通类一样来使用该类,可以在栈与堆上创建实例。