Как передать в функцию массив, который хранится в обьекте

178
05 апреля 2017, 16:33

У меня в объекте класса хранится инициализированный массив.
Теперь нужно в отдельной функции сделать манипуляции с этим массивом, но мне его нужно передать как параметр в функцию. Как мне передать массив в функцию, если этот массив хранится в объекте?

Answer 1

Простой ответ, например вот так:

#include <vector>
#include <iostream>
class MyClass
{
public:
    MyClass()
    {
        m_array = {1,2,3,4,5};
    }
    const std::vector<int>& get_array() const
    {
        return m_array;
    }
private:
    std::vector<int> m_array;
};
void some_global_func(const std::vector<int>& _vec)
{
    for (auto& it : _vec)
        std::cout << it << " ";
}
int main()
{
    MyClass my;
    some_global_func(my.get_array());
    std::cin.get();
    return 0;
}

Вам надо немного уточнить про то, какой именно массив у вас хранится. Например, в примере массив динамический (обёрнутый в std::vector), а у вас может быть статический. Передавать нужно будет через указатель, так как нет такого понятия "передать статический массив в функцию".

Так или иначе принцип тот же, вы должны объявить и определить функцию-член класса, которая предоставляет доступ к массиву (например, возвращает на него указатель/ссылку/копию), так вы не будете нарушать принципы инкапсуляции. Можно сам массив сделать public, но это плохой стиль и рано или поздно приведёт к ошибкам.

А вообще, существует такой принцип проектирования GRASP, как "информационный эксперт" (information expert), который гласит, что данные по возможности должны обрабатываться там же, где хранятся. Подумайте, правильно ли вы всё спроектировали.

READ ALSO
проблемы stm32 uart

проблемы stm32 uart

Всем приветВозникла небольшая проблема

348
Натуральные числа, не делящиеся ни на один из квадратов простых чисел [требует правки]

Натуральные числа, не делящиеся ни на один из квадратов простых чисел [требует правки]

Нужно найти все натуральные числа, не делящиеся ни на один из квадратов простых чисел и не превышающие число N (1 <= N <= 10^9)

216
Как сделать пересекающиеся оси на d3.js?

Как сделать пересекающиеся оси на d3.js?

Добрый день! Создаю стандартные оси OX, OYВсе замечательно, но нулевая точка обозначается по каждой из осей, причем текст пересекается самой...

306
Подскажите конструкцию для функции

Подскажите конструкцию для функции

Начну с того, что у меня есть функционал для блогаВ нем есть article'ы

193