实现一个不能被继承的特殊类。

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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值