【发布时间】:2014-11-19 19:29:08
【问题描述】:
我有一个带有私有属性的类,它是一个向量。执行 getter 函数的最佳方法是什么?
- 返回整个向量:
vector<char*> getNames() { return names; }- 这会返回一个副本还是一个指针?由于它是私有的,因此可以访问吗?
- 返回迭代器:
vector<char*>::iterator getNames() { return names.begin(); } - 公开矢量
- 我知道这对于 OOP 来说是不好的做法,只列出选项。
【问题讨论】:
-
请注意,选项 2 可以工作,但前提是您也提供了访问
end()迭代器的方法,否则消费者将不知道何时停止迭代——您可能想要请改用vector<char*>::const_iterator,这样消费者就不能修改元素。在那张纸条上,你为什么不使用std::vector<std::string>? -
@cdhowie 即使
const_iterator(或返回一个常量引用)也只能防止指针本身被修改,而不是它们指向的字符串。 -
@T.C.确实,投票最多的答案仍然是这种情况。字符串向量确实是最好的方法,因为
const std::string不能像char * const那样修改。 -
@cdhowie 我正在更新一些旧代码,所以我在弄乱字符串之前更改了向量。不过感谢您的建议。
-
调用者是否需要整个
vector?const char* getName(unsigned i) const;就够了吗?更容易维护 const 的正确性和封装性。
标签: c++ oop vector iterator private