Перейти к содержимому

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

  • автор:

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

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

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

Конструктор производного класса требует конструктор предка
Выдаёт вот такую вот ошибку: no matching function for call to ‘Cube::Cube()’ class Cube <.

Вызвать конструктор производного класса без конструктора базового класса
Здравствуйте! У меня есть базовый класс треугольник и производный класс равносторонний.

Конструктор производного класса
Доброго времени суток!! Значит так, есть у меня две строки большая и маленькая и два класс String и.

Наследование. Конструктор базового класса в теле производного
Здравствуйте! Помогите, пожалуйста, разобраться. Есть пример: class String < protected.

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

Добрый вечер, это не то, о чем вы подумали! О new[] я знаю =)
Я делаю свою простую реализацию умных указателей для с++98. Но не могу сделать сделать указатель на массив.

Когда добавляю конструктор smart_ptr(int[] t) <>;
подчёркивает t и пишет что не хватает ‘)’ . Да, все кавычки и скобки до и после этого конструктора стоят нормально.
Как это исправить? И разве массив это не указатель(ну не сам массив, ну вы поняли =))?

  • Вопрос задан более года назад
  • 174 просмотра

Простой 3 комментария

  • Facebook
  • Вконтакте
  • Twitter

Sergio Поменял, но не дает все равно сохранить указатель на массив. Конструктор вот такой

что-то не понимаю, почему мне дают сохранить указатель на первый элемент массива.

У тебя _ptr не правильно обьявлён, скинь как ты его обьявляешь.
Лучше использовать указатели так int *t, а не так int t[]. И вот это _ptr = &(t[0]); аналогично этому _ptr = t. Судя по коду и твоей задаче тебе нужно сохранить указатель на зарезервированную облать и по итогу у тебя должно получиться нечто такое:

И так как это у тебя умный указатель тебе желательно делать так int *_ptr=nullptr и в конструкторе проверять этот момент и вести подсчёт указателей на эту область памяти чтобы при удалении и создании небыло утечки памяти, так же ещё есть конструкторы копирования, перемещения и их тоже надо переопределять, но так как у тебя простой умный указатель лучше определи их как = delete, чтобы потом не появлялись вопросы от куда взялась лишняя ссылка.

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

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

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

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

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

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

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

Никак.

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

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

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

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

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

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

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

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

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

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

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

Best regards,
Sergey.

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

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

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

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

А>Никак.

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

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

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

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

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

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

От: 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.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Я пытаюсь передать массив конструктору в C ++, но он не работает:

Решение

Ваш пример работает нормально — просто позаботьтесь о delete[] с new[] выделил место соответственно после того, как вы закончили (чтобы предотвратить утечку памяти). Также вместо использования 15 в качестве жестко закодированной константы, вы, вероятно, захотите использовать параметр size (иначе для массивов больше чем 15 элементов, у вас будет нарушение доступа к памяти).

Массивы могут быть размещены в C ++ по-разному:

По сути, он решает, в какой памяти будет расположен ваш массив — но есть много различий в этих двух задействованных методах — см. Т.е. Что и где находится стек и куча? .
Некоторые основные отличия:

  • выделение стека не может использовать динамическую длину как переменную, т.е. int size = 10; int a[size]; // <- is invalid
  • выделение стека автоматически удаляется, когда они выходят за рамки
  • выделение кучи должно быть deleted[] явный, чтобы не утечка памяти

Линия int* a = new int[3]; объявит указатель-переменную в ячейку памяти, где 3 int значения могут соответствовать. Таким образом, после объявления эти 3 значения могут быть адресованы непосредственно как a[0] , a[1] а также a[2] , После того, как все операции завершены delete[] a; является необходимым. Потому что, если указатель a* выходит из области видимости (то есть в конец вашей функции), память для 3 значений не освобождается автоматически.

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

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