继承STL容器可以吗?

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

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

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

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

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

 

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

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

 

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

你可能感兴趣的:(继承STL容器可以吗?)