Форум: Форум C++Разное
Новые темы: 00
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум C++

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Динамически объекты
 
 автор: Dark Felex   (28.01.2007 в 16:54)   письмо автору
 
 

Здравствуйте.
Подскажите пожалуйста, как во время исполнения программы динамически создавать новые объекты и вызывать их методы для работы с ними. Заранее количество их (объектов) неизвестно, но можно ограничиться некоторым максимумом, скажем 2048...

  Ответить  
 
 автор: cheops   (28.01.2007 в 17:18)   письмо автору
 
   для: Dark Felex   (28.01.2007 в 16:54)
 

Хм... просто выделяйте под объект память.
int *obj = new prt;

Если вам требуется множество объектов выделяйте массив объектов
int *obj = new prt[2048];

Только не забудте потом осовобдить выделенную память при помощи оператора delete []
delete [] obj;

  Ответить  
 
 автор: Dark Felex   (29.01.2007 в 19:56)   письмо автору
 
   для: cheops   (28.01.2007 в 17:18)
 

Ну это само собой.
А если предположим, у меня прога начинает выполняться и работает с... 5-ю объектами. А потом появляется необходимость чтобы был еще один. Вот как мне создать этот 6-ой?.. Дело в том что я не хочу сразу выдеять много памяти, чем-то мне это дело не нравится.

Я вообще думал так: можно написать функцию, которая будет инитиировать новые объекты и возвращать на них указатели или предварительно эти указатели занося в некий список (глобальный). А в каждом объекте есть переменная уникальная для него (ID) и перебирая все объекты я мог бы найти адрес нужного мне, и дальше уже делать с ним все что только не захочется.

Я заблуджаюсь и это все на самом деле бред пьяного суслика, или какая-то нормальная идея тут есть?..

  Ответить  
 
 автор: cheops   (29.01.2007 в 20:03)   письмо автору
 
   для: Dark Felex   (29.01.2007 в 19:56)
 

Не очень понятно, объекты находятся массиве?

  Ответить  
 
 автор: Dark Felex   (30.01.2007 в 11:32)   письмо автору
 
   для: cheops   (29.01.2007 в 20:03)
 

Нет, в том то и дело.
Можно, не спорю, создать массив объектов, но под это уйдет ведь много памяти?..

  Ответить  
 
 автор: cheops   (30.01.2007 в 13:37)   письмо автору
 
   для: Dark Felex   (30.01.2007 в 11:32)
 

> но под это уйдет ведь много памяти?
Да собственно столько же, сколько под отдельные объекты, просто объекты в памяти будут расположены один подле другого и появится возможность использовать арифметику указателей (на чём собственно индексация массива и построена)...

PS Можно поместить объекты в коллекцию STL, например в vector - там в любой момент можно динамически добавить в коллекцию новый элемент или удалить старый.

  Ответить  
 
 автор: Dark Felex   (31.01.2007 в 20:52)   письмо автору
 
   для: cheops   (30.01.2007 в 13:37)
 

Пойду учиться как это делать.

Кстати, а как это делается? =) Ну если не влом описать?..

  Ответить  
 
 автор: cheops   (01.02.2007 в 01:59)   письмо автору
 
   для: Dark Felex   (31.01.2007 в 20:52)
 

В самом простейшем случае работа с контейнером vector может выглядит следующим образом
#include <iostream>
#include <vector>
using namespace std;

int main()
{
  // Вектор с целочисленными элементами
  vector<int> coll;
  
  int count = 0;
  cout << "Введите число ";
  cin >> count;

  try
  {
    // Заполняем коллекцию
    for(int i = 1; i <= count; i++)
    {
      coll.push_back(i);
    }

    // Выводим содержимое коллекции
    for(int i = 0; i < coll.size(); i++)
    {
      cout << coll[i] << ' ';
    }
    cout << "\n";
  }
  catch(bad_alloc)
  {
    cout << "Не удалось выделить память под коллекцию\n";
  }

  return 0;
}

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования