1
4
用朴素的旧
|
2
6
我会在课堂上使用typedef。原因是因为
使用该typedef不会公开实现的任何细节,实际上它有助于封装。typedef中的重要元素是本地名称,而不是定义为的名称。
在上面的for循环中,用户代码不知道
|
3
2
这些细节是什么?唯一暴露的是索引所需的大小(几乎可以肯定是大小)。添加typedef不会公开更多信息。 |
4
1
所有大小类型基本上都是同一个标量类型,由于它是标量类型,因此它对于编译器是隐式可转换的。因此,使用
提供一个
对我来说,这看起来同样不错。 |
5
1
如果您希望获得最高级别的封装,那么我将使用: private: typedef std::vector<A*> container_type; container_type _container; public: typedef container_type::const_iterator const_iterator; const_iterator begin()const{ return _container.begin(); } const_iterator end()const{ return _container.end(); } 通过使用迭代器而不是大小类型,您可以在std::vector和std::list之间切换。但是,如果您的班级要求随机访问,那么我将选择: private: typedef std::vector<A*> container_type; container_type _container; public: typedef container_type::size_type size_type; A* operator[](size_type idx)const{ return _container[idx]; } size_type size()const{ return _container.size(); } 如果类的用户不需要能够遍历内部容器的内容,那么我只需将typedef保持为私有,而不提供那些公共访问器函数。 |
6
0
如果你的班级已经在使用
但是,如果您要进行完全封装,您需要一种技术,例如PIMPLIDOM或接口类(也称为协议类),完全隐藏它
之前:
之后(使用PIMPL技术):
fooimpl是在源文件中定义的,而不是在头文件中定义的,在实现细节中完全隐藏了向量的选择。因此,你不再需要
|
Julia · 矢量中相加为总和S的值的数量 1 年前 |
C_Rod · 在模板方法中确定STL容器中项目的数据类型 2 年前 |
quantumwell · 将空向量放入std::map() 6 年前 |
OutOfBound · 对未初始化内存使用算法的优点 6 年前 |
DarthRubik · 在使用列表删除之后,迭代器如何不无效 6 年前 |