继承STL容器可以吗?

STL中的容器类是可以继承的,但由于STL中的容器类都是没有virtual析构的,所以其衍生类与基类并不符合IS-A关系,这种继承其实是为了重用代码,而从重用代码的角度来看,公有继承不如私有继承,继承不如组合。

如果用公有继承的方式,虽然一开始看上去很方便,所有基类接口都可以继续使用,但如果你需要修改某一方法的规则时就很麻烦了。

>不知道stl中容器能否继承,并修改一些默认的函数和操作!

在公有继承的情况下,所有非多态成员函数都是无法修改其实现的,只能通过重名的方法来“隐藏”,但当把衍生类指针向上映射为基类指针访问时,所有被隐藏的方法又将暴露出来。前面所说的“多态方法”包括虚成员函数以及template-method模式等包含对虚成员函数的调用的成员函数,它们可以在衍生类中进行override。

总而言之,STL中的容器类可以通过“继承”的方法重用其实现,但不推荐从STL类公有继承。最好使用组合的方式重用,也可以考虑使用私有继承。

 

 =======================================================================================================

可是我真的想扩充标准容器的功能啊? 
两个方案: 
1. 对于基于标准容器的算法,可以不基于某一种容器扩展,而是写成接受 iterator 的算法。 
这个在 <algorithm> 里有不少例子,可以参考。(其实,看看 <algorithm> 你可能就已经发现你想扩充的算法了)简单的增加一个算法都可以使用这种方案。 
基于 iterator 的算法具有通用性,可以不只应用与某一个容器,复用性好,何乐而不为呢。 
2. 将标准容器作为类成员。 优先使用组合方式,只是重用容器代码而已,不具备继承特性。
如果你的类需要一些额外的数据成员,那这就是一个比较好的方案了

 

转载于:https://www.cnblogs.com/lizckevin/articles/7120029.html

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值