欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

设计一个不能被继承的类

程序员文章站 2022-05-29 12:58:00
...

要设计一个类不能被继承有很多种方法,这里实现一种非常简单且常见的方法。我们知道类的私有成员不能在类域外被调用,那么如果将类的构造函数和析构函数都放入类的私有成员中,在子类调用基类的构造函数和析构函数时就会发生编译错误,这样的基类就是不能被继承的类。
当然,这个类也不能直接实例化,而是通过特殊的方法来得到这个类的实例,我们来看这个不能被继承的类:

class SealedClass
{
private:
    SealedClass(int data)
        : _data(data)
    {}
    ~SealedClass()
    {}
public:
    static SealedClass* GetSealed(int data)
    {
        SealedClass *psc = new SealedClass(data);
        return psc;
    }
    static SealedClass* DelSealed(SealedClass* ps)
    {
        if(ps)
            delete ps;
    }
    int _data;
};

这里用两个静态函数来调用类的构造函数和析构函数,完成类的实例化和释放。那么来看这个类的使用:

void test()
{
    int number = 0;
    cout << "please input:>";
    cin >> number;
    SealedClass* ps = SealedClass::GetSealed(number);
    cout << ps->_data << endl;
    SealedClass:: DelSealed(ps);
}

先输入数据,然后打印出类中数据的值:
设计一个不能被继承的类
试试这个类能不能被继承:

class Class2 : public SealedClass
{};

void test2()
{
    Class2 c;
}

编译结果:
设计一个不能被继承的类
编译失败,可见,不能被继承的类构建成功了;