实现一个不能被继承的特殊类。
程序员文章站
2022-07-15 20:49:31
...
1、实现一个不能被继承的类?
1、将类的构造函数设置为私有
2、在父类中给一个静态的函数构造对象
1)保证了父类的构造函数在子类中不可见,但是子类的构造函数是要调用父类
的构造函数合成。
2)此时出现一个问题,子类不能构造出对象,但是这个类也不能构造出对象了,因此提供一个静态的公有函数来构造对象
2、如何实现一个只能在堆上生成对象的类?
可在 栈上生成对象(father f)
堆上可生成对象
静态区定义一个全局对象(father f)
1、把构造函数设置成私有
2、给一个静态函数获取一个对象(对象的空间的new出来的)
漏洞-》有可能在外面构造了一个堆上生成的对象1,但是又用这个对象1拷贝构造了一个对象2,那么这个对象2就是在栈上生成的。
补丁-》把拷贝构造函数和赋值运算符的重载只声明不实现,并且声明为私有,就不会使用类里面默认的。
//实现一个只能在堆上生成对象的类
class father
{
public:
static father* GetObj()
{
return new father();
}
public:
int num_;
private:
father()
{};
father(const int num_)
{};
father&operator=(const int&num_)
{};
};
附加:类的防拷贝的实现
1、只声明不实现
2、声明为私有的
3、如何实现一个只能在栈上生成对象的类?
1、把构造函数设置成私有
2、提供一个静态的函数生成一个匿名对象
//实现一个只能在栈上生成对象的类
class father
{
public:
static father GetObj()
{
return father();
}
private:
father();
private:
int _name;
};
int main()
{
//father* ptr=father::GetObj();
father f=father::GetObj();
return 0;
}
下一篇:
使用