我应该公开受保护的std :: vector吗?

时间:2011-03-11 13:30:47

标签: c++

我有一个我打算让其他人继承的课程。它有一个std :: vector,我只希望开发人员能够读取,但不能修改,我的基本函数修改它。我应该提供一个返回const迭代器的函数,或者将该向量公开为protected。

由于

4 个答案:

答案 0 :(得分:9)

如果将向量公开为protected,则子类将能够对其进行修改。因此,您应该公开返回const迭代器的方法。

您可以使用Non-Virtual Interface idiom为用户和子类公开不同的接口。

答案 1 :(得分:4)

如果您保护它,那么您将失去保护,因为任何子类都可以将其更改为公共,并允许其他人修改它。

为什么不提供const引用?如果返回const迭代器,您可能需要重写很多接口,包括begin,end,size等。

答案 2 :(得分:1)

如果你不希望派生类修改向量,那么我认为答案是直截了当的:提供函数来返回只读迭代器!

返回迭代器也封装了基类,这显然是一个好主意。

答案 3 :(得分:0)

保护它的缺点:不能轻易改变到不同的容器,失去对允许操作的控制,编码到实现而不是接口,更难控制测试

函数返回迭代器的缺点:一点点额外的输入(可能比询问这个问题要少)

对我来说似乎是一个明显的答案。