实现一个不能继承的类,这在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就不能被继承,如果继承该类就会导致编译不过。而且可以像使用普通类一样来使用该类,可以在栈与堆上创建实例。
原文:http://www.cnblogs.com/cmranger/p/4367015.html