设计一个不能被继承的类
程序员文章站
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;
}
编译结果:
编译失败,可见,不能被继承的类构建成功了;