用C++实现不能被继承的类

来源:互联网 发布:单片机频率计程序 编辑:程序博客网 时间:2024/06/05 05:45

C++中没有自己定义这样一个类,需要自己实现。

(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() {}};


0 1
原创粉丝点击