Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.94
серофим
2 / 2 / 0
Регистрация: 09.11.2011
Сообщений: 85
#1

Реализовать динамический массив объектов, учитывая, что параметры для конструктора у каждого объекта разные - C++

15.12.2012, 22:14. Просмотров 2195. Ответов 9
Метки нет (Все метки)

Здравствуйте.Чёткого ответа на просторах интернета не нашёл , поэтому пишу сюда.
Есть класс, нужен динамический массив объектов этого класса .Как реализовать , учитывая , что для каждого экземпляра параметры для конструктора разные ?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.12.2012, 22:14
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Реализовать динамический массив объектов, учитывая, что параметры для конструктора у каждого объекта разные (C++):

Как реализовать класс Pricelist, который будет содержать динамический массив объектов Model - C++
Мне нужно создать динамический массив объектов другого класса. Тоесть в Pricelist будет массив объектов, а сами модельки он будет брать из...

Выделение памяти под массив объектов без вызова конструктора - C++
Добрый вечер. Насколько я знаю, при выделении памяти под массив объектов, для каждого из них вызывается конструктор. Можно ли сперва...

Операторы для объектов конструктора - C++
Я хочу сделать следующие действия, но не знаю как перегрузить оператор для этого: Time t(5),tt(3),y(0); Time Ti; y=t+tt; ...

Динамический массив, подсчитать статистические параметры - C++
Всем привет!! Буду очень благодарен за помощь с задачей: Необходимо создать динамический массив, размер массива указать ручками из...

Динамический массив объектов(изменить реализацию ввода элементов, через "cin". Для передачи в public) - C++
Вот прога: #include<iostream> using namespace std; class samp { int i,j; public: void set_ij(int a, int b) {i=a, j=b;} ...

Динамический массив объектов - C++
Как определить объект Group, который будет содержать динамический массив объектов Person?

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
go
Эксперт C++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
15.12.2012, 22:21 #2
серофим, класть по одному объекту в вектор.
0
серофим
2 / 2 / 0
Регистрация: 09.11.2011
Сообщений: 85
15.12.2012, 22:23  [ТС] #3
Контейнер Vector ? Можно небольшой пример?
0
Kuzia domovenok
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,925
Записей в блоге: 1
15.12.2012, 22:27 #4
1) создать массив указателей на объекты и для каждого объекта выделять память с вызовом нужного конструктора.
2) копировать в созданный по умолчанию массив объектов объекты, созданные конструктором
1
go
Эксперт C++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
15.12.2012, 22:28 #5
Цитата Сообщение от серофим Посмотреть сообщение
Контейнер Vector ?
std::vector

Цитата Сообщение от серофим Посмотреть сообщение
Можно небольшой пример?
Правдо лень. Ну кладем
C++
1
myvec.push_back(MyClass(1, 2, 3)); // У MyClass должен быть конструктор с тремя целыми параметрами
1
серофим
2 / 2 / 0
Регистрация: 09.11.2011
Сообщений: 85
15.12.2012, 22:38  [ТС] #6
Kuzia domovenok, ,что-то вроде этого ?
C++
1
2
3
4
5
6
7
8
9
10
11
slass  pr
{
...
pr(int a);
....
};
....
pr*m[n];
....
for(i=0;i<n;i++)
m[i]=new pr(i);
1
Random_value
0 / 0 / 0
Регистрация: 28.08.2016
Сообщений: 3
28.08.2016, 11:07 #7
Совершенно не обязательно использовать вектор. Тем более на сколько я знаю, нельзя использовать вектор для объектов класса без пустого конструктора, а это не очень то хорошо - если сам класс будет использовать для своих полей выделение памяти, то в идеале это нужно делать в конструкторе и очищать память в деструкторе.
Например для класса:
C++
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
#include <string>
class MyClass
{
public:
    char *sName;
    int nAge;
    MyClass(char* Name);
    MyClass(char* Name,int age);
    ~MyClass();
};
 
MyClass::MyClass(char* Name)
{
    sName=new char[strlen(Name)+1];
    strcpy(sName,Name);
    nAge=18;
}
 
MyClass::MyClass(char* Name,int age)
{
    sName=new char[strlen(Name)+1];
    strcpy(sName,Name);
    nAge=age;
}
 
MyClass::~MyClass()
{
    delete[] sName;
}
Нужно делать вот так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
int _tmain(int argc, _TCHAR* argv[])
{
    MyClass *people=(MyClass*)malloc(sizeof(MyClass));
    new(&people[0])MyClass("Alan");
    people=(MyClass*)realloc(people,sizeof(MyClass)*2);
    new(&people[1])MyClass("Bob",20);
    for (int i = 0; i < 2; i++)
    {
        std::cout<<people[i].sName<<" "<<people[i].nAge<<std::endl;
        people[i].~MyClass();
    }
    free(people);
    system("pause");
    return 0;
}
Удалять элементы с конца примерно так же - вызываем деструктор, а потом realloc, на 1 элемент меньше.
0
obivan
28.08.2016, 11:13
  #8

Не по теме:

Цитата Сообщение от Random_value Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
    MyClass *people=(MyClass*)malloc(sizeof(MyClass));
    new(&people[0])MyClass("Alan");
    people=(MyClass*)realloc(people,sizeof(MyClass)*2);
    new(&people[1])MyClass("Bob",20);
    for (int i = 0; i < 2; i++)
    {
        std::cout<<people[i].sName<<" "<<people[i].nAge<<std::endl;
        people[i].~MyClass();
    }
кто вас такому научил ?)

0
pav1uxa
28.08.2016, 11:32
  #9

Не по теме:

Цитата Сообщение от Random_value Посмотреть сообщение
Совершенно не обязательно использовать вектор.
Совершенно не обязательно одевать штаны через ноги. Можно через голову.

0
nonedark2008
908 / 647 / 134
Регистрация: 28.07.2012
Сообщений: 1,760
28.08.2016, 12:21 #10
Цитата Сообщение от Random_value Посмотреть сообщение
нельзя использовать вектор для объектов класса без пустого конструктора
Вполне можно с помощью "не совсем уже нового" стандарта. С ограничениями, но можно.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <vector>
 
using namespace std;
 
struct A {
    int x;
    A(int x) : x(x) {}
};
int main() {
    vector<A> v;
    v.reserve(5);
    for (int i = 0; i < 5; ++i)
        v.emplace_back(A(i));
 
    return 0;
}
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.08.2016, 12:21
Привет! Вот еще темы с ответами:

динамический массив объектов - C++
помогите с функцией PrintGarage, чтоб она выводила массив объектов Garage int main(){ char model; int number = 0; int run =...

Реализовать систему геометрических объектов с расчетом площади каждого из них - C++
помогите плиз Реализовать систему геометрических объектов с расчетом площади каждого из них.

Дано натуральное число n (n <= 9999). Учитывая все четыре цифры числа, определить, правильно, что оно содержит: все разные цифры - C++
Плиз срочно надо=) для Microsoft Visual Studio 2010 Запрещено размещать тему в нескольких разделах одновременно (кросспостинг), а...

Динамический массив объектов класса - C++
Здравствуйте. Возник вопрос, на который не получается найти понятного ответа. Есть класс Point: #include &lt;iostream&gt; #include...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
28.08.2016, 12:21
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru