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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.94
серофим
2 / 2 / 0
Регистрация: 09.11.2011
Сообщений: 85
15.12.2012, 22:14     Реализовать динамический массив объектов, учитывая, что параметры для конструктора у каждого объекта разные #1
Здравствуйте.Чёткого ответа на просторах интернета не нашёл , поэтому пишу сюда.
Есть класс, нужен динамический массив объектов этого класса .Как реализовать , учитывая , что для каждого экземпляра параметры для конструктора разные ?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.12.2012, 22:14     Реализовать динамический массив объектов, учитывая, что параметры для конструктора у каждого объекта разные
Посмотрите здесь:

Динамический массив объектов C++
C++ динамический массив объектов
Выделение памяти под массив объектов без вызова конструктора C++
Динамический массив, подсчитать статистические параметры C++
C++ Динамический массив динамических объектов
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
15.12.2012, 22:21     Реализовать динамический массив объектов, учитывая, что параметры для конструктора у каждого объекта разные #2
серофим, класть по одному объекту в вектор.
серофим
2 / 2 / 0
Регистрация: 09.11.2011
Сообщений: 85
15.12.2012, 22:23  [ТС]     Реализовать динамический массив объектов, учитывая, что параметры для конструктора у каждого объекта разные #3
Контейнер Vector ? Можно небольшой пример?
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
15.12.2012, 22:27     Реализовать динамический массив объектов, учитывая, что параметры для конструктора у каждого объекта разные #4
1) создать массив указателей на объекты и для каждого объекта выделять память с вызовом нужного конструктора.
2) копировать в созданный по умолчанию массив объектов объекты, созданные конструктором
go
Эксперт C++
3582 / 1362 / 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 должен быть конструктор с тремя целыми параметрами
серофим
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);
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 элемент меньше.
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();
    }
кто вас такому научил ?)

pav1uxa
28.08.2016, 11:32
  #9

Не по теме:

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

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.08.2016, 12:21     Реализовать динамический массив объектов, учитывая, что параметры для конструктора у каждого объекта разные
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
nonedark2008
624 / 502 / 92
Регистрация: 28.07.2012
Сообщений: 1,343
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;
}
Yandex
Объявления
28.08.2016, 12:21     Реализовать динамический массив объектов, учитывая, что параметры для конструктора у каждого объекта разные
Ответ Создать тему
Опции темы

Текущее время: 03:36. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru