Передача массива в конструктор производного класса
Народ, задача такая:
Создать абстрактный класс с виртуальной функцией – норма.
Создать производные классы : комплексные числа, вектор из 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"); }
Передача массива в конструктор
Доброго времени суток, написал метод который сортирует массив и возвращает значение но что то туплю как его передать в конструктор.
Вот метод и конструктор который надо дописать:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Student* sortGroup() { Student* newArray = new Student[size]; for (int i(0); i size; i++) { newArray[i] = students[i]; } sort(newArray, newArray + size, []( Student &s1, Student &s2) ); return newArray;
1 2 3 4
Group(Student* students) { this->students = students; }
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:
Передача массива в конструктор производного класса
Народ, задача такая: Создать абстрактный класс с виртуальной функцией – норма. Создать .
Передача двумерного массива в конструктор класса
Здравствуйте! Не получается передать двумерный массив как параметр конструктора. Необходимо.
Передача двумерного динамического массива в конструктор
Всем привет, задача. Произвольный многоугольник в двумерном пространстве». Данные класса.
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь
Передача потока в конструктор
Подскажите пожалуйста, как создать динамический массив объектов класса, передавая в конструктор.
Передача аргументов в конструктор
У меня есть в классе конструктор по умолчанию: Port(const char * br = "none",const char * st =.
Передача вектора по ссылке в конструктор класса
Здравствуйте, есть такая ситуация: Vector id_vec; Thread *thr = new Thread; db_worker.
Как передать массив в конструктор 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, то будет синтаксис присваивания.
Как передать массив в конструктор c
Пользователь
Регистрация: 30.01.2016
Сообщений: 34
передать массив в конструктор
передать этот массив
std::array mas;
в конструктор класса. Как?
Регистрация: 15.02.2010
Сообщений: 15,557
constructor(mas); constructor(&mas);
и т.д. в зависимости от того, какие у конструктора параметры.
Пользователь
Регистрация: 30.01.2016
Сообщений: 34
struct(const std::array &data)
я так сделал, это правильно?
Регистрация: 15.02.2010
Сообщений: 15,557
Конструкторы называются по названию типа, а назвать тип struct вам вряд ли дадут.
И вообще, что это? Объявление конструктора или его вызов? Если первое, то это ваше дело просить ссылку или по значению фигачить. Ессли второе, то см. мой пост.