Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.04.2011, 18:19   #1
Alt_Shift
Пользователь
 
Аватар для Alt_Shift
 
Регистрация: 11.11.2010
Сообщений: 74
По умолчанию Добавление элемента в массив объектов {с++}

массив объектов класса вида

Код:
	Biblioteka *test;
	test=new Biblioteka[kol];
	for (i=0;i<kol;i++)
		{
			cout<<"Введите по очереди название, автора, год выпуска и группу книги \n";
			cin>>n;
			cin>>a;
			cin>>y;
			cin>>v;
		test[i].set(n,a,y,v);
		}
одним из пунктов меню является добавление нового элемента в массив.

Код:
Biblioteka *temp;
	temp=new Biblioteka[kol];
	for(int i=0;i<kol;i++)
{
   temp[i] = test[i];
}
 delete[]test;
 
	test=new Biblioteka[kol+1];
	for(int i=0;i<kol;i++)
{
   test[i] = temp[i];
}
	delete[] temp;

	cout<<"Введите по очереди название, автора, год выпуска и группу книги \n";
			cin>>n;
			cin>>a;
			cin>>y;
			cin>>v;
		test[kol].set(n,a,y,v);
Но когда я вывожу на экран после добавления- показывает лишь то, что было введено в начале, новый элемент не отображается. В чем ошибка?

Последний раз редактировалось Alt_Shift; 21.04.2011 в 18:31.
Alt_Shift вне форума Ответить с цитированием
Старый 21.04.2011, 20:02   #2
malinoff
Форумчанин
 
Аватар для malinoff
 
Регистрация: 08.01.2010
Сообщений: 205
По умолчанию

Код:
test[kol].set(n,a,y,v);//если перевыделяли память под kol+1 размер, то новая запись будет на kol+1 месте
Если помог - кликни на значок весов под аватаром.
malinoff вне форума Ответить с цитированием
Старый 21.04.2011, 20:12   #3
Alt_Shift
Пользователь
 
Аватар для Alt_Shift
 
Регистрация: 11.11.2010
Сообщений: 74
По умолчанию

я об этом догадывался, но как это место вывести на экран? у меня есть описанный метод show, который выводит на экран поля, но новые объекты он не выводит.

Код:
void show()
{
	cout<<"Название книги "<<name<<endl;
	cout<<"Автор книги "<<avtor<<endl;
	cout<<"Год выпуска "<<year<<endl;
	cout<<"Группа "<<group<<endl;
};

Последний раз редактировалось Alt_Shift; 21.04.2011 в 20:19.
Alt_Shift вне форума Ответить с цитированием
Старый 21.04.2011, 20:17   #4
malinoff
Форумчанин
 
Аватар для malinoff
 
Регистрация: 08.01.2010
Сообщений: 205
По умолчанию

Напишите метод,возвращающий размер библиотеки. Записывайте не на kol место, а на size.
Ну и собственно вывод элемента size
Если помог - кликни на значок весов под аватаром.
malinoff вне форума Ответить с цитированием
Старый 21.04.2011, 20:25   #5
Alt_Shift
Пользователь
 
Аватар для Alt_Shift
 
Регистрация: 11.11.2010
Сообщений: 74
По умолчанию

Цитата:
Сообщение от malinoff Посмотреть сообщение
Записывайте не на kol место, а на size.
вот этот момент непонятен.
Alt_Shift вне форума Ответить с цитированием
Старый 21.04.2011, 20:41   #6
malinoff
Форумчанин
 
Аватар для malinoff
 
Регистрация: 08.01.2010
Сообщений: 205
По умолчанию

Ну, есть у вас библиотека с 10 записями. kol = 9(учитывая 0 элемент). Вы хотите добавить еще одну запись.
Код:
Biblioteka *temp;
	temp=new Biblioteka[kol];
	for(int i=0;i<kol;i++)
{
   temp[i] = test[i];
}
 delete[]test;
 
	test=new Biblioteka[kol+1];
	for(int i=0;i<kol;i++)
{
   test[i] = temp[i];
}
	delete[] temp;

	cout<<"Введите по очереди название, автора, год выпуска и группу книги \n";
			cin>>n;
			cin>>a;
			cin>>y;
			cin>>v;
		test[kol].set(n,a,y,v); //вот в этой строке ошибка. Вы записываете элемент не на свежесозданное kol+1 место, а на уже использованное kol место
Ну и вывод соответственно test[kol+1].show(); если был добавлен 1 элемент
Если помог - кликни на значок весов под аватаром.

Последний раз редактировалось malinoff; 21.04.2011 в 20:44.
malinoff вне форума Ответить с цитированием
Старый 21.04.2011, 20:46   #7
Alt_Shift
Пользователь
 
Аватар для Alt_Shift
 
Регистрация: 11.11.2010
Сообщений: 74
По умолчанию

то есть приравнять size к kol+1 и последнюю запись делать как test[size]?
Alt_Shift вне форума Ответить с цитированием
Старый 21.04.2011, 20:51   #8
malinoff
Форумчанин
 
Аватар для malinoff
 
Регистрация: 08.01.2010
Сообщений: 205
По умолчанию

Цитата:
Сообщение от Alt_Shift Посмотреть сообщение
то есть приравнять size к kol+1 и последнюю запись делать как test[size]?
На самом деле, можно и без размера, главное - отслеживать, сколько элементов было добавлено в библиотеку.
Просто именно метод, возвращающий size библиотеки, удобен для доступа к ее последнему элементу, если вы не знаете, сколько именно элементов было добавлено.
А в выделении памяти и записи нового элемента - выделять память не под kol, потому что на второй итерации добавления нового (второго) элемента, kol не увеличится и увеличения размера не будет. Так что удобнее использовать размер, причем при выделении памяти под новый элемент надо размер увеличивать
Если помог - кликни на значок весов под аватаром.
malinoff вне форума Ответить с цитированием
Старый 21.04.2011, 21:06   #9
Alt_Shift
Пользователь
 
Аватар для Alt_Shift
 
Регистрация: 11.11.2010
Сообщений: 74
По умолчанию

я наверное попросту не могу понять суть этого метода и какие значения в него нужно передавать
Alt_Shift вне форума Ответить с цитированием
Старый 21.04.2011, 21:11   #10
malinoff
Форумчанин
 
Аватар для malinoff
 
Регистрация: 08.01.2010
Сообщений: 205
По умолчанию

Цитата:
Сообщение от Alt_Shift Посмотреть сообщение
я наверное попросту не могу понять суть этого метода и какие значения в него нужно передавать
А. Тьфу. Уже сплю, вот и пишу бред. Извините.
Код:
void realloc_lib(int &kol)
{
Biblioteka *temp;
	temp=new Biblioteka[kol];
	for(int i=0;i<kol;i++)
{
   temp[i] = test[i];
}
 delete[]test;
        ++kol;
	test=new Biblioteka[kol];
	for(int i=0;i<kol;i++)
{
   test[i] = temp[i];
}
	delete[] temp;

	cout<<"Введите по очереди название, автора, год выпуска и группу книги \n";
			cin>>n;
			cin>>a;
			cin>>y;
			cin>>v;
		test[kol].set(n,a,y,v);
}
Где kol - размер библиотеки.
Если помог - кликни на значок весов под аватаром.
malinoff вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
вектор объектов класса и алгоритмы РагнаР Общие вопросы C/C++ 3 10.04.2011 07:00
Удаление элемента из класса контейнера Tema_Crazzzy Общие вопросы C/C++ 7 26.11.2010 15:51
создание объектов класса Serjuk Общие вопросы C/C++ 8 13.05.2010 18:54
Коллекция объектов класса в С++ MarihuanaP Помощь студентам 2 09.05.2010 13:06
Создание объектов класса в цикле Formdet Общие вопросы .NET 4 23.04.2010 21:43