Как передать массив в конструктор c
Перейти к содержимому

Как передать массив в конструктор c

Как передать массив в конструктор c

У меня есть класс, который обозначает некий прогноз.

Class Yprognose < public Yprognose(double arVal):m_arVal(arVal) <> . protected: double m_arVal; >

Создавая его объект, передаю значение double. Вопрос – как передать туда массив?
То есть – как правильно синтаксически – передать заполненный массив в класс. Как передать массив в виде аргумента конструктора? Нужно ли этот массив создавать в конструкторе класса именно в жтой ситуации? Что вообще надо сделать в конструкторе при наличии массива среди переменных класса?

F() < Carray * aaa=new leftClass(); For(int I=1;1 <=12;1++) < aaa.Add(i); >Yprognose Prog(&aaa); >

Возможно вопром мтоит гнилых помидоров, но прошу ими не кидать в меня — просто мне нужен пример ПРАВИЛЬНОГО кода!вопрос чести

Безвыходных ситуаций не бывает!(Правило Кирхгофа)
Re: конструктор с переменной-массивом

От: Аноним
Дата: 29.08.03 13:38
Оценка:

Здравствуйте, altmenn, Вы писали:

A> Создавая его объект, передаю значение double. Вопрос – как передать туда массив?

Никак.

A>Возможно вопром мтоит гнилых помидоров, но прошу ими не кидать в меня — просто мне нужен пример ПРАВИЛЬНОГО кода!

#include templatetypename T> class foo < public: foo(const std::vector& bar) : bar(bar) <> private: std::vector bar; >; int main() < std::vectordouble> baz(10); foodouble> qux(baz); >

Re: конструктор с переменной-массивом

От: Sergey
Дата: 29.08.03 13:59
Оценка:

Hello, altmenn!
You wrote on Fri, 29 Aug 2003 13:19:10 GMT:

a> У меня есть класс, который обозначает некий прогноз.

a>

 a> Class Yprognose a> < a>public a> Yprognose(double arVal):m_arVal(arVal) <> a> . a> protected: a> double m_arVal; a> > a>

a> Создавая его объект, передаю значение double. Вопрос – как передать
a> туда массив?

Массив — никак. Можно передать ссылку на массив или указатель на первый элемент.

a> То есть – как правильно синтаксически – передать
a> заполненный массив в класс. Как передать массив в виде аргумента
a> конструктора?

a> Нужно ли этот массив создавать в конструкторе класса
a> именно в жтой ситуации?

Он сам создастся. Нужно ли тебе его инициалировать — тебе виднее.

a> Что вообще надо сделать в конструкторе при
a> наличии массива среди переменных класса?

Зависит от того, что тебе надо.

Best regards,
Sergey.

Posted via RSDN NNTP Server 1.7 beta
Одним из 33 полных кавалеров ордена «За заслуги перед Отечеством» является Геннадий Хазанов.
Re[2]: конструктор с переменной-массивом

От: altmenn DLR IPA
Дата: 29.08.03 14:04
Оценка:

Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, altmenn, Вы писали:

A>> Создавая его объект, передаю значение double. Вопрос – как передать туда массив?

А>Никак.

A>>Возможно вопром мтоит гнилых помидоров, но прошу ими не кидать в меня — просто мне нужен пример ПРАВИЛЬНОГО кода!
А>

А>#include А>templatetypename T> А>class foo А>< А>public: А> foo(const std::vector& bar) : bar(bar) <> А>private: А> std::vector bar; А>>; А>int main() А> < А>std::vectordouble> baz(10); А> foodouble> qux(baz); А>> А>

Спасибо! А то, что Вы знаете stl мне очень помогло

Безвыходных ситуаций не бывает!(Правило Кирхгофа)
Re[2]: конструктор с переменной-массивом

От: altmenn DLR IPA
Дата: 29.08.03 14:08
Оценка:

Вопрос еще. Вы отвечаете:
a>> Нужно ли этот массив создавать в конструкторе класса
a>> именно в этой ситуации?

S>Он сам создастся. Нужно ли тебе его инициалировать — тебе виднее.

В принципе мне и надо выяснить — в каком случае необходима инициализация. Если класс принимает при использовании заполненный массив, то его не надо ни создавать ни инициализировать — правильно я поняла?

Безвыходных ситуаций не бывает!(Правило Кирхгофа)
Re[3]: конструктор с переменной-массивом

От: Sergey
Дата: 29.08.03 14:12
Оценка:

Hello, altmenn!
You wrote on Fri, 29 Aug 2003 14:08:45 GMT:

a> Вопрос еще. Вы отвечаете:
a>>> Нужно ли этот массив создавать в конструкторе класса
a>>> именно в этой ситуации?

S>> Он сам создастся. Нужно ли тебе его инициалировать — тебе виднее.

a> В принципе мне и надо выяснить — в каком случае необходима
a> инициализация. Если класс принимает при использовании заполненный
a> массив, то его не надо ни создавать ни инициализировать — правильно я
a> поняла?

Если тебе нужен заполненный массив, придется его заполнять самостоятельно. Синтаксиса для присваивания массивов, насколько мне известно, не существует.

Best regards,
Sergey.

Posted via RSDN NNTP Server 1.7 beta
Одним из 33 полных кавалеров ордена «За заслуги перед Отечеством» является Геннадий Хазанов.
Re: конструктор с переменной-массивом

От: Анатолий Широков
Дата: 29.08.03 14:31
Оценка:

Можно без копирования — передать и сразу же обработать:

// прогноз class forecast < public: forecast(const double ptr[], size_t size) : data_(ptr), size_(size) < >public: double result() const < for(int i = 0; i// use data_[i].. > private: const double* data_; size_t size_; >; int main() < double arr[10]; // fill array . double r = forecast(arr, sizeof(arr)/sizeof(arr[0])).result(); >

Re: конструктор с переменной-массивом

От: LaptevVV
Дата: 29.08.03 14:36
Оценка:

Здравствуйте, altmenn, Вы писали:

A>У меня есть класс, который обозначает некий прогноз.

A>

A>Class Yprognose A>< A>public A>Yprognose(double arVal):m_arVal(arVal) <> A>. A>protected: A>double m_arVal; A>> A>

A> Создавая его объект, передаю значение double. Вопрос – как передать туда массив?
A>То есть – как правильно синтаксически – передать заполненный массив в класс. Как передать массив в виде аргумента конструктора? Нужно ли этот массив создавать в конструкторе класса именно в жтой ситуации? Что вообще надо сделать в конструкторе при наличии массива среди переменных класса?

В тот класс, который написан — никак. Вы можете определить класс прямо с массивом в качестве члена — тогда надо длину проставлять. У Вас в этом случае должен быть конструктор, с аргументом-указателем (имя массива — указатель) и длиной массива.
Далее, вы можете в программе создавать любым способом массив того типа, что у Вас в в классе в качестве поля, заполнять его и вызывать конструктор, прописывая в аргументах этот заполненный массив.
Вариант с длиной массива — указать ее как параметр шаблона. Тогда ваш класс с массивом — шаблон.
Второй путь — прописать в классе указатель. Тогда в конструкторе надо будет выделять память. Сколько — может быть параметром конструктора. Заполнять такой объект придется отдельно.
Можно перегрузить конструктор и параметрами опять прописать указатель и длину. Тогда конструктор выделяет память по аргументу-длине и заполняет из передаваемого массива.

Хочешь быть счастливым — будь им!
Без булдырабыз.
Re[3]: конструктор с переменной-массивом

От: Аноним
Дата: 29.08.03 14:41
Оценка:

Здравствуйте, altmenn, Вы писали:

A>Спасибо! А то, что Вы знаете stl мне очень помогло

Нет, ну если уж Вы так не любите STL, можно обойтись, конечно.

#include templatetypename T, std::size_t N> class foo < public: foo(const boost::array& bar) : bar(bar) <> private: boost::array bar; >; int main() < boost::arraydouble, 10> baz = <>; foodouble, 10> qux(baz); >

Re[2]: конструктор с переменной-массивом

От: LaptevVV
Дата: 29.08.03 14:47
Оценка:

Анатолий Широков уже прописал вариант.
Но я еще подскажу.
Если количество данных невелико, то можно определить конструктор с переменным числом параметров. Тогда конструктор считает параметры и резервирует столько памяти, сколько параметров.
Естественно, не забудьте, что деструктор должен всю затребованную память возвращать.

Хочешь быть счастливым — будь им!
Без булдырабыз.
Re[3]: конструктор с переменной-массивом

От: Анатолий Широков
Дата: 29.08.03 14:56
Оценка:

Здравствуйте, LaptevVV, Вы писали:

LVV>Анатолий Широков уже прописал вариант.
LVV>Но я еще подскажу.
LVV>Если количество данных невелико, то можно определить конструктор с переменным числом параметров. Тогда конструктор считает параметры и резервирует столько памяти, сколько параметров.
LVV>Естественно, не забудьте, что деструктор должен всю затребованную память возвращать.

Я не стал бы ради передачи массива переменной длины корячиться с эллипсом (. ) — это слишком.

Re[4]: конструктор с переменной-массивом

От: skyline
Дата: 01.09.03 06:48
Оценка:

Здравствуйте, Sergey

S>Синтаксиса для присваивания массивов, насколько мне известно, не существует.

Если заменить твой массив на boost::array, то будет синтаксис присваивания.

Как передать массив в класс java

Для передачи массива в класс Java , вам необходимо создать переменную типа массива в вашем классе и передать массив в качестве аргумента в конструктор или метод класса.

public class MyClass  private int[] myArray; public MyClass(int[] myArray)  this.myArray = myArray; > public void printArray()  for (int i : myArray)  System.out.println(i); > > > // пример использования int[] numbers = 1, 2, 3, 4, 5>; MyClass myObject = new MyClass(numbers); myObject.printArray(); // => [1, 2, 3, 4, 5] 
  • Здесь мы создаем класс MyClass с переменной экземпляра myArray типа int[]
  • Затем мы создаем конструктор, который принимает myArray в качестве аргумента и устанавливает его как значение переменной экземпляра myArray .
  • Далее мы определяем метод printArray() , который просто выводит элементы массива на консоль.
  • Когда мы создаем объект MyClass , мы передаем массив numbers в качестве аргумента конструктора, что приводит к тому, что значения в numbers будут присвоены myArray .
  • Затем мы вызываем метод printArray() , который выводит содержимое myArray на консоль.

Как передать массив в конструктор класса?

Мне нужно считать элементы массива в конструкторе класса SegmentTree, следовательно необходимо как-то передать туда массив.
Код ниже выводит ошибку Types ‘SegmentTree’ and ‘SegmentTree *’ are not compatible
Что мне нужно сделать, чтобы все сработало?

#include #include #include using namespace std; class SegmentTree < private: int tree[]; public: SegmentTree(int array[], int length)< int size = (1 >; int main(int argc, const char * argv[]) < // insert code here. int n; cin >> n; int a[n]; for (int i = 0; i < n; ++i) cin >> a[i]; SegmentTree tree = new SegmentTree(a, n); >
  • Вопрос задан более двух лет назад
  • 346 просмотров

Комментировать
Решения вопроса 1
Wataru @wataru Куратор тега C++
Разработчик на С++, экс-олимпиадник.

Читайте ошибку внимательно. Дело не в массиве.

Вместо SegmentTree tree = new SegmentTree(a, n);
надо
SegmentTree tree(a, n); или SegmentTree *tree = new SegmentTree(a, n);

new — создает указатель. Инициализировать им нужно, соответственно, указатель.

Передача массива в конструктор производного класса

Народ, задача такая:
Создать абстрактный класс с виртуальной функцией – норма.
Создать производные классы : комплексные числа, вектор из 10 элементов,
матрица 2х2. Определить функцию нормы : для комплексных чисел – модуль, для вектора – корень квадратный из суммы элементов по модулю,для матрицы – максимальное значение по модулю.

С комплексными числами вроде как разобрался (не знаю на сколько правильно, но вроде работает), а вот с массивами застрял конкретно. Подскажите как нужно работать с массивами?

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
#include "stdafx.h" #include using namespace std; class norm { protected: float x; float y; int z[10]; int k[2][2]; public: norm(float X, float Y) { x=X; y = Y; } norm(int n[]) { for (int i = 0; i  10; i++) z[i] = n[i]; } norm(int c[2][2]) { for (int i = 0; i  2; i++) for (int j = 0; j  2; j++) k[i][j] = c[i][j]; } virtual float norma() = 0; }; class complex : public norm { public: complex(float X, float Y) : norm(X, Y) {} float norma() //вычисление модуля { return sqrt(pow(x, 2) + pow(y, 2)); } }; class vektor : public norm { //int z[10]; vektor(int c[]) : norm(c) {} float norma() { int sum = 0; for (int i = 0; i  10; i++) sum = sum + z[i]; return sqrt(sum); } }; /*class matr : public norm  matr(int c[2][2]) : norm(c) <> //for (int i = 0; i < 2; i++) for (int j = 0; j < 2; j++) k[i][j] = c[i][j];>;*/ int main() { int Z[10]; for (int i = 0; i  10; i++) Z[i]=10; norm * com; norm * vek; //объекты производных классов com = new complex(-3.0, 4.0); cout  ->norma()  ; vek = new vektor(Z[10]); system("pause"); }

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *