Создать массив объектов класса
Создать массив объектов класса Patient
Patient: Фамилия, Имя, Отчество, Адрес, Номер медицинской карты, Диагноз. Создать массив объектов.
Создать массив объектов разработанного класса
Нужно создать массив объектов разработанного класса в классе Program и заполнить объектами из.
Разработать класс Book, создать массив объектов класса
Разработать классы для описанных ниже объектов. Включить в класс методы set (), get (), show ().
Можно ли создать массив из объектов базового и производного класса?
Доброй ночи. Есть задание: Возник вопрос о реализации метода "TovarRead". Насколько я понял.
Регистрация: 02.10.2016
Сообщений: 74
1 2 3 4 5 6 7 8 9 10 11 12 13 14
for(int i=0;in;i++) { newFile[i] = new File(); Console.WriteLine("Ввод данных\n"); Console.WriteLine("Введите size:"); newFile[i].size = int.Parse(Console.ReadLine()); Console.WriteLine("Введите name:"); newFile[i].name = Console.ReadLine(); Console.WriteLine("Введите date:"); newFile[i].date = Convert.ToDateTime(Console.ReadLine()); Console.WriteLine("Введите quantity:"); newFile[i].quantity = int.Parse(Console.ReadLine()); Console.WriteLine(newFile[i].ToString()); }
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь
Создать массив объектов данного класса (задача и наброски кода внутри)
Текст задачи: 2. Напишите программу, в которой объявляется делегат для методов с символьным.
Создать массив из созданных объектов класса Студент. Для каждого проинициализировать поля и вызвать методы
Написать программу, которая содержит класс с полями и методами, характеризующего отдельного.
Массив объектов базового класса, позволяющий работать с набором объектов — чтение, вывод
Расширить программы с классами. Каждый разработанный класс считать базовым; для каждого такого.
Передача ссылки на объект класса (массив объектов класса)
Доброго времени, уважаемые форумчане. Прошу прощения за столь глупый вопрос, но правда очень долго.
Или воспользуйтесь поиском по форуму:
C++. Классы и массивы. Инициализация массивов значениями данных из объектов класса. Примеры
Классы и массивы. Инициализация массивов значениями данных из объектов класса. Примеры
Поиск на других ресурсах:
1. Инициализация массива значениями, которые есть членами данных объекта. Пример
Возможны случаи, когда нужно объединить переменные, которые являются членами объекта класса в массив. В нижеследующем примере инициализируется массив, который в качестве инициализаторов использует члены-данных объекта. На момент объявления, члены-данных объекта должны иметь какие то значения.
Пример определяет класс Radius , в котором объявляются:
- внутренняя private переменная radius ;
- внутренний private метод CalcValues() , заполняющий значениями public -переменные length , area , volume ;
- общедоступные ( public ) внутренние переменные класса length , area , volume , содержащие соответствующие значения длины окружности, площади круга и объема шара для радиуса r ;
- конструкторы класса;
- методы доступа GetR() SetR() .
Листинг класса следующий:
// класс, реализующий величину радиуса геометрической фигуры class Radius < double radius; // переменная, определяющая радиус // внутренний метод, формирующий значения переменных length, area, volume void CalcValues(void) < const double pi = 3.141592653589; length = 2 * pi * radius; area = pi * radius * radius; volume = 4.0/3.0 * pi * radius * radius * radius; > public: double length; // длина окружности double area; // площадь круга double volume; // объем шара // конструкторы Radius() < radius = 1; CalcValues(); // заполнить переменные length, area, volume > Radius(double radius) < this->radius = radius; CalcValues(); // заполнить переменные length, area, volume > // методы доступа int GetR(void) < return radius; > void SetR(double radius) < this->radius = radius; CalcValues(); // заполнить переменные length, area, volume > >;
Использование класса в функции main() или другой функции:
Radius r(3); // объект r класса Radius // инициализация массива V значениями, которые есть членами данных объекта r double V[] = < r.length, r.area, r.volume >; double x; x = V[0]; // x = 18.8496 - длина окружности x = V[1]; // x = 28.2743 - площадь круга x = V[2]; // x = 113.097 - объем шара
2. Инициализация массива значениями, которые возвращают объекты класса. Пример
Элементы массива могут быть инициализированы значениями, которые возвращают методы некоторого класса. В примере демонстрируется инициализация массива V значениями, которые возвращают методы класса Radius : Length() , Area() , Volume() .
Объявление класса имеет вид;
// класс, который реализует величину радиуса некоторой геометрической фигуры class Radius < double radius; // переменная, определяющая радиус public: double Length() < return (2 * 3.1415 * radius); > double Area() < return (3.1415 * radius * radius); > double Volume() < return (4.0/3.0 * 3.1415 * radius * radius * radius); > // конструкторы Radius() < radius = 1; >Radius(double radius) < this->radius = radius; > // методы доступа int GetR(void) < return radius; > void SetR(double radius) < this->radius = radius; > >;
Использование класса в некотором методе
Radius r(3); // объект r класса Radius // инициализация массива V значениями, которые возвращают методы объекта класса r double V[] = < r.Length(), r.Area(), r.Volume() >; double x; x = V[0]; // x = 18.8496 - длина окружности x = V[1]; // x = 28.2743 - площадь круга x = V[2]; // x = 113.097 - объем шара
Связанные темы
Как создать динамический массив из объектов класса?
Нужно создать динамический массив из объектов класса, у которого единственный конструктор принимает значение. Язык C++ без использования класса vector !
class Test < int k; public: Test(int _i) ~Test(); void put_k(int i) int get_k() >;
Реализация
#define COUNT_OBJ 4 int main() < // Данное объявление массива не является верным, т.к. конструктору класса Test в обязательном порядке нужно передать параметр типа int Test *objPtr = new Test[COUNT_OBJ]; // Со статическим объявлением массива все проще Test objArray[COUNT_OBJ] = ; return 0; >
- Вопрос задан более трёх лет назад
- 30479 просмотров
1 комментарий
Оценить 1 комментарий
Борода @mink_h Автор вопроса
Ivan Sokolov: Compiler: MinGW (TDM-GCC-32)
Если добавить конструктор без параметров, либо объявить статический массив Test objArray[COUNT_OBJ] = ; — в обоих случаях все работает.
Решения вопроса 2
Борода @mink_h Автор вопроса
И так, нашел несколько способов:
1. Если компилятор поддерживает стандарт C++ 2011
Test *objPtr = new Test[COUNT_OBJ] ;
2. Реализация того, что было сказано GavriKos
Test *objPtr = (Test*)calloc(COUNT_OBJ, sizeof(Test)); memset(objPtr, 0, COUNT_OBJ * sizeof(Test)); for (int i = 0; i < COUNT_OBJ; ++i) objPtr[i].put_k(i + 5);
Этот вариант нужно использовать с осторожностью, т.к. память выделяется но не вызываются конструктор и деструктор объекта.
3. Вариант, представленный Rsa97 в комментариях
Test **objPtr = new Test*[COUNT_OBJ]; for (int i = 0; i < COUNT_OBJ; ++i) objPtr[i] = new Test(i + 5);
4. На мой взгляд, самая удачная реализация с использованием Placement new. На данный способ указал Игорь Иванов
Test *objPtr = static_cast(operator new[] (COUNT_OBJ * sizeof(Test))); for (int i = 0; i < COUNT_OBJ; ++i) new (objPtr + i) Test(i + 5);
Ответ написан более трёх лет назад
Нравится 3 1 комментарий
насчёт второго варианта: мне кажется, что здесь только выделение памяти под массив. но реального заполнения элементами нету. в итоге undefined behavior. поправьте, если не прав
Инженер-сетевик. Программирование-хобби.
Классический Placement new
Ответ написан более трёх лет назад
Комментировать
Нравится 2 Комментировать
Ответы на вопрос 6
Creative frontend developer
Используйте vector и не думайте ни о чем
std::vector myTests(4, Test(777)); std::cout
Ответ написан более трёх лет назад
Комментировать
Нравится 2 Комментировать
Варианты:
1) Использовать vector
2) Выделить просто участок памяти (malloc и иже с ними), а потом заполнить его в цикле
3) Не использовать конструктор с параметром, а сделать метод типа Initialize.
Ответ написан более трёх лет назад
Нравится 1 3 комментария
Борода @mink_h Автор вопроса
1 - vector мне не совсем подходит, нужно именно массив
2 - можете пояснить по-подробнее?
3 - данный класс уже написан, я могу лишь использовать то, что есть
mink_h Почему vector не подходит?
По второму пункту. Что то вроде такого (код очень черновой и не факт что сработает в чистом виде):
Test* foo = (test*)malloc(sizeof(Test*) * count);
for (int i=0; i
Вы только лишь выделяете память. Инициализировать необходимо вручную.
Ответ написан более трёх лет назад
Борода @mink_h Автор вопроса
Дело в том, что я вообще не могу объявить такой массив:
error: no matching function for call to 'Test::Test()'
Test *objPtr = new Test[COUNT_OBJ];
Для правильного вопроса надо знать половину ответа
Test **objPtr = new (Test *)[COUNT_OBJ]; for (int i = 0; i < COUNT_OBJ; i++) objPtr[i] = new Test(i);
Ответ написан более трёх лет назад
Борода @mink_h Автор вопроса
error: array bound forbidden after parenthesized type-id
mink_h: Значит так:
typedef Test * TestPtr; . Test **objPtr = new TestPtr[COUNT_OBJ]; for (int i = 0; i < COUNT_OBJ; i++) objPtr[i] = new Test(i);
Борода @mink_h Автор вопроса
Спасибо! Данный метод работает, вопрос пока не закрываю - хочется узнать еще варианты.
А что если сделать массив не объектов этого класса, а массив указателей на обьекты? А потом в цикле инициализировать каждый элемент уже с вызовом конструктора.
А вообще, используйте вектор, какие проблемы.
Ответ написан более трёх лет назад
Борода @mink_h Автор вопроса
Это аналогично тому, что предложил товарищ выше. Да, данный метод работает, вопрос пока не закрываю - хочется узнать еще варианты. vector использовать не могу.
Программист на «си с крестами» и не только
Операция присваивания или перемещения есть? Пускай даже созданная автоматически? Если есть — вот, смотрите.
#include #include class Test < int k; public: Test(int _i) void put_k(int i) int get_k() >; struct TestWrapper < Test payload; TestWrapper() : payload(0) <>TestWrapper(int i) : payload(i) <> TestWrapper(const Test& i) : payload(i) <> >; int main() < Test test(10); std::vectorv; v.push_back(test); std::cout
Если нет — тогда динамический массив так просто работать не может (фишка динамического массива — заводить новый массив и копировать информацию из старого). Только использованием умных указателей.
#include #include #include class Test < int k; public: Test(int _i) Test& operator=(const Test&) = delete; Test& operator=(Test&&) = delete; void put_k(int i) int get_k() >; int main() < std::vector> v; v.push_back(std::unique_ptr(new Test(10))); std::cout get_k()
Как сформировать массив объектов класса в программировании на языке Python
Если вы знакомы с основами программирования, то, скорее всего, уже использовали массивы для хранения и обработки данных. Однако, что делать, если вам необходимо хранить и работать с несколькими объектами одного класса? Конечно же, в данной ситуации пригодится массив объектов класса! Создание массива объектов класса является мощным инструментом, который позволяет упростить и оптимизировать ваш код. Представьте себе, что вы создали класс «Студент» с различными свойствами, такими как имя, возраст и средний балл. Однако, вам нужно хранить информацию о нескольких студентах, а не только о одном. В этом случае, использование массива объектов класса будет идеальным решением. Вы сможете создать массив, который может содержать множество объектов класса «Студент», и легко манипулировать этой информацией.
Как создать массив объектов класса в языке программирования
Одним из основных способов создания массива объектов класса является использование конструктора класса. Конструктор класса — это специальный метод, который вызывается при создании нового объекта класса. Он может иметь параметры и может выполнять определенные операции, необходимые для инициализации объекта. При использовании конструктора для создания массива объектов необходимо определить его внутри класса и передать необходимые параметры. После создания экземпляра класса с помощью конструктора, объект добавляется в массив.
- Шаг 1: Определите класс и его конструктор.
- Шаг 2: Создайте массив объектов класса.
- Шаг 3: Используйте конструктор класса для создания объектов.
- Шаг 4: Добавьте объекты в массив.
Использование конструктора класса для создания объектов в массиве позволяет легко инстанцировать объекты, передавая необходимые значения через параметры. Кроме того, такой подход упрощает обработку и манипуляцию с данными объектов в массиве. Таким образом, создание массива объектов класса становится гибким и эффективным инструментом для решения различных задач программирования.
Использование конструктора класса для создания объектов
Конструкторы классов позволяют создавать объекты с заданными параметрами, что делает код более гибким и удобочитаемым. Кроме того, конструкторы обеспечивают контроль над процессом создания объекта и позволяют производить дополнительные действия, например, проверку введенных данных или инициализацию других свойств.
Инициализация массива объектов класса через цикл
Преимущество использования цикла при инициализации массива объектов класса заключается в том, что он позволяет автоматически создавать и заполнять элементы массива. Нет необходимости каждый раз вручную вызывать конструктор класса и устанавливать значения для каждого объекта. Цикл позволяет сократить количество кода и уменьшить вероятность возникновения ошибок.