如何阻止一个类被继承。

   为什么要阻止一个类被继承?“为了安全考虑,比如说不想出现切割赋值的情况。”到底哪种情况下需要为这种安全做考虑?不太明白,请知道的朋友跟贴。
   疑问先放这儿,问题怎么解决?我起先想法是让类的构造函数私有,用友元函数去创建对象。别的类如果从它派生,定义对象时就会因为访问不了基类的构造函数而失败。但这是个什么样的类啊。。。我汗。。。
   Stroustrup的答案,如下:

class Usable;

class Usable_lock {
friend class Usable;
private:
Usable_lock() {}
Usable_lock(const Usable_lock&) {}
};

class Usable : public virtual Usable_lock {
// ...
public:
Usable();
Usable(char*);
// ...
};


原理:给它添加一个不含任何数据成员的虚拟基类,,可能的构造函数都设为私有。将这个类声明为基类的友元类。因为虚拟基类的构造函数都需要在最外围的类构造函数中被调用,所以如果别的类从这个类派生,定义对象时将会因为无法访问这个类的虚拟基类的构造函数而失败。
  如果你以后想给你的类“封顶”,就这么做,给它一个这个造型的虚拟基类。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值