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

C++ 我应该公开受保护的std::vector吗?,c++,C++,我有一个阶级,我打算让别人继承。它有一个std::vector,我只希望开发人员能够读取它,而不是修改它,我的基函数可以修改它。我应该提供一个返回常量迭代器的函数,还是将向量公开为受保护的 谢谢如果您将向量公开为受保护的,子类将能够修改它。因此,您应该公开返回常量迭代器的方法 您可以使用为用户和子类公开不同的接口。如果您对其进行了保护,则您将失去保护,因为任何子类都可以将其更改为public,并允许其他人对其进行修改 为什么不提供常量参考?如果返回常量迭代器,您可能需要重写很多接口,包括begi

我有一个阶级,我打算让别人继承。它有一个std::vector,我只希望开发人员能够读取它,而不是修改它,我的基函数可以修改它。我应该提供一个返回常量迭代器的函数,还是将向量公开为受保护的


谢谢

如果您将向量公开为受保护的,子类将能够修改它。因此,您应该公开返回常量迭代器的方法


您可以使用为用户和子类公开不同的接口。

如果您对其进行了保护,则您将失去保护,因为任何子类都可以将其更改为public,并允许其他人对其进行修改


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

如果您不希望派生类修改向量,那么我认为答案很简单:提供函数返回只读迭代器


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

不利于保护基类:无法轻松更改为不同的容器,无法控制允许的操作,编码为实现而不是接口,更难包含测试

函数返回迭代器的缺点:额外键入一点(可能比问这个问题花费的时间要少)


对我来说,这似乎是一个显而易见的答案。

经验法则:不要公开数据成员,即使是受保护的