powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / динамический массив переменной длины
8 сообщений из 8, страница 1 из 1
динамический массив переменной длины
    #32478699
tanex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Имеется класс базовый класс CPerson и его два производных класса: CMaster и CStudent. Необходимо создать массив из объектов CMaster и CStudent, длина которого будет изменятся по мере добавления или удаления элементов массива.
У меня получилось создать массив переменной длины только из однородных объектов. Как это сделать для объектов из разных классов?
int size_t = CPerson::GetPersonCounter();
CPerson* pTempPerson = new CPerson[size_t + 1];
for (int i = 0; i < size_t; i++)
{
pTempPerson = pPerson;
}

delete[] pPerson;

pTempPerson[size_t].SetPersonInfo(szFirstName, szSurname, szCountry);
pTempPerson[size_t].SetPersonID(size_t);

pPerson = pTempPerson;
...
Рейтинг: 0 / 0
динамический массив переменной длины
    #32478722
funikovyuri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как это сделать для объектов из разных классов?

Хранить в массиве не объекты, а указатели на них

PS> а как массив подойдет класс std::vector из STL
...
Рейтинг: 0 / 0
динамический массив переменной длины
    #32478843
tanex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как создать массив указателей на объекты, массив переменной длины
Т.Е.
если size - переменная, то CPerson* pTempPerson[size] - ошибка
а CPerson* pTempPerson = new CPerson[size] - динамический массив объектов
а как по другому????
...
Рейтинг: 0 / 0
динамический массив переменной длины
    #32478847
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
#include <vector>
using namespace std;

vector<CPerson*> vPerson;
vector<CPerson*>::iterator itP; //чтобы каждый раз не создавать, ну это так, на всякий случай....


это если С++
...
Рейтинг: 0 / 0
динамический массив переменной длины
    #32479096
tanex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
STL это хорошо
Но в данном случае пользоваться можно только простым массивом
???
...
Рейтинг: 0 / 0
динамический массив переменной длины
    #32479381
dishlo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
без STL скучно, может стандартные классы VC++ использовать можно, кажется CTypedPtrArray?
Если нет то придется писать свою обертку над массивами или по другому изощряться. В любом случае с указателями дело иметь проще.
Если обертку над массивом, то что-то типа:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
class ArrayWrapper
{
private:
unsigned m_counter;
CPerson *allItems;

public:
bool addItem(CPerson*);
bool removeItem(unsigned);
CPerson* getItem(unsigned);

};


поиск и удаление элементов перебором.

Если без массива, то можно все экземпляры класса СPerson связать в бесконечную цепь, где каждый экземпляр имеет указатель на следующий экземпляр, если указатель пустой, то это последний экземпляр.
Код: plaintext
1.
2.
3.
class CPerson
{
CPerson* nextItem; // указатель на следующий элемент
};

В статической переменной класса хранить указатель на начальный элемент. Хотя статическая переменная не пройдет если происходит наследование. Ну тогда опять писать класс-обертку.
А вообще, не надо извращаться, вектор - самый гуманный способ, и для программиста и для языка.
...
Рейтинг: 0 / 0
динамический массив переменной длины
    #32479681
rst
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CPerson* pTempPerson = new CPerson[size] - динамический массив объектов
а как по другому????

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
            int size= 12 ;
	void**ArrayOfPointers=new void*[size];
 for (int i= 0 ;i<size;++i)
	ArrayOfPointers[i]=new CPerson();

CPerson* pPerson=(CPerson*)ArrayOfPointers[ 0 ];
pPerson->SetPersonInfo()

// потом удаляем так же 
 for (int i= 0 ;i<size;++i) {
           CPerson* pPerson=(CPerson*)ArrayOfPointers[i];
	delete pPerson
 }
delete ArrayOfPointers
...
Рейтинг: 0 / 0
динамический массив переменной длины
    #32480293
tanex
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вон оно как:
void**ArrayOfPointers=new void*[size];
все получилось!!!
большущее спасибо
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / динамический массив переменной длины
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]