我有一个类,并且有一个数组设置为私有。如何制作get_array()
功能?我的意思是,如何知道我必须返回arr [0]的指针,我知道如何返回该数组,但这不是打破私有规则吗?还有另一种方法可以返回这个数组吗?
我实际上想过在main中使用array2,然后使用类函数编辑该数组。如果以上措施不起作用,我认为这将是一个计划B.
答案 0 :(得分:1)
您无法从函数返回数组。正如你所说,你可以返回一个指向数组第一个元素的指针,但是这有一个缺点,你必须有一些单独的功能来从类外部获得数组的大小。
更好的选择是返回包含数组的结构。最简单的方法是使用array
类,可以在in Boost和许多标准库实现中找到它。
例如,
class C
{
public:
typedef boost::array<int, 5> ArrayType;
ArrayType get_array() const { return array_; }
private:
ArrayType array_;
};
答案 1 :(得分:1)
从纯粹的OO角度来看,它实际上取决于谁将使用你的类的私有变量。如果它是朋友类或其他可信实体,则分发私有数据成员没有问题。
答案 2 :(得分:1)
你可以做一些事情。
最简单的方法是返回指向const的第一个元素的指针:const int* get_array(void) const;
您可能还希望创建一个函数来查询大小。
更好的选择可能是将const-reference返回给数组。使用typedef
简化:
typedef int array_type[10];
const array_type& get_array(void) const;
另一个选项是wrap the array up,例如boost::array
。您可以根据需要将Boost的标题复制并粘贴到您自己的array.hpp
:
typedef boost::array<int, 10> array_type;
const array_type& get_array(void) const;
答案 3 :(得分:0)
我会在C ++中使用std :: vectors而不是数组。您可以像原始文件(vector<whatever> getter(){ return foo;}
)一样返回它们,它们往往更容易处理。
答案 4 :(得分:0)
返回对数组的const引用,使其成为只读。
const ArrayType& ma = myClass->get_array();
除非你的客户是邪恶的,否则他们不应该修改数组。 :-)为清楚起见,使用数组和数组本身的类不能超出范围。
编辑错字。