Возврат приватного массива - PullRequest
2 голосов
/ 13 августа 2010

У меня есть класс, и есть массив, установленный как приватный. Как мне сделать функцию get_array()? Я имею в виду, как мне вернуть этот массив, зная, что мне придется возвращать указатель arr [0], как мы знаем, но не нарушает ли это частное правило? Есть ли другой способ вернуть этот массив?

Я на самом деле думал о наличии массива 2 в главном, а затем отредактировал этот массив с помощью функции класса. Я думаю, что это будет план Б, если вышеупомянутое не сработает.

Ответы [ 5 ]

1 голос
/ 13 августа 2010

Вы можете сделать несколько вещей.

Самое простое - вернуть указатель на первый элемент const: const int* get_array(void) const; Возможно, вы захотите создать функцию для запроса размера.

Лучшим вариантом может быть возвращение const-ссылки на массив.Используйте typedef, чтобы упростить задачу:

typedef int array_type[10];
const array_type& get_array(void) const;

Другой вариант - обернуть массив , например boost::array.Вы можете скопировать и вставить заголовок Boost, если хотите, в свой собственный array.hpp:

typedef boost::array<int, 10> array_type;
const array_type& get_array(void) const;
1 голос
/ 13 августа 2010

С точки зрения чистого ОО, это действительно зависит от того, кто будет использовать закрытую переменную вашего класса.Если это класс друга или другой доверенный объект, то нет проблем с выдачей закрытого члена данных.

1 голос
/ 13 августа 2010

Вы не можете вернуть массив из функции.Вы можете, как вы говорите, вернуть указатель на первый элемент массива, но это имеет недостаток, заключающийся в том, что у вас должна быть отдельная функциональность, чтобы получить размер массива вне класса.

Лучшим вариантом было бы вернуть структуру, которая содержит массив.Самый простой способ сделать это - использовать класс array, который можно найти в Boost и во многих реализациях стандартных библиотек.

Например,

class C
{
public:
    typedef boost::array<int, 5> ArrayType;
    ArrayType get_array() const { return array_; }

private:
    ArrayType array_;
};
0 голосов
/ 13 августа 2010

Возвращает константную ссылку на массив, чтобы сделать его доступным только для чтения.

const ArrayType& ma = myClass->get_array();

Если ваши клиенты не злые, они не должны иметь возможность изменять массив.:-) Для ясности, класс с массивом и сам массив не могут выходить из области видимости, пока вы его используете.

Отредактировано для опечатки.

0 голосов
/ 13 августа 2010

Я бы использовал std :: vectors вместо массивов в C ++.Вы можете вернуть их как примитив (vector<whatever> getter(){ return foo;}), и с ними легче иметь дело.

...