返回私有数组

时间:2010-08-13 15:30:17

标签: c++ arrays pointers private

我有一个类,并且有一个数组设置为私有。如何制作get_array()功能?我的意思是,如何知道我必须返回arr [0]的指针,我知道如何返回该数组,但这不是打破私有规则吗?还有另一种方法可以返回这个数组吗?

我实际上想过在main中使用array2,然后使用类函数编辑该数组。如果以上措施不起作用,我认为这将是一个计划B.

5 个答案:

答案 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();

除非你的客户是邪恶的,否则他们不应该修改数组。 :-)为清楚起见,使用数组和数组本身的类不能超出范围。

编辑错字。