代码改变世界

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就不能被继承,如果继承该类就会导致编译不过。而且可以像使用普通类一样来使用该类,可以在栈与堆上创建实例。