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

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

Войти
Регистрация
Восстановить пароль
 
toneysix
0 / 0 / 0
Регистрация: 23.04.2015
Сообщений: 5
#1

Динамический массив объектов класса - C++

25.12.2013, 19:36. Просмотров 246. Ответов 0
Метки нет (Все метки)

Добрый вечер. Столкнулся с проблемой изменения дин.массива объектов класса.
Сущность заключается в следующем:
Создан класс, который включает совокупность объектов одной природы. В процессе работы программы требуется проводить изменение этих объектов: их удаление и создание.
Создал массив, в который поместил объекты класса.
Описать казус происходящего несколько обременено, но все же:
Первый добавленный элемент - объект, частично создается некорректно: некоторые свойства объекта теряются, вместо их нормальных (установленных) значений содержится неосмысленная информация в виде непонятных чисел.
Также в силу первого удаление производится некорректно.
Код создания объекта:
C++
1
2
3
4
5
    CreateWindow( "Окно 1", 100, 100, 100, 100, 1 );
    CreateWindow( "Окно 2", 200, 200, 100, 100, 1 );
    CreateWindow( "Окно 3", 300, 300, 100, 100, 1 );
    CreateWindow( "Окно 4", 400, 400, 100, 100, 1 ); // УДАЛИТЬ
    CreateWindow( "Окно 5", 500, 500, 100, 100, 1 );
Код класса:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class window
{
    public:
        int         index;          // индекс - окна
        bool        draw;           // 0  - окно не рисовать, 1 - рисовать
        int short   mode;           // 0  - свёрнуто, 1 - развёрнуто
        bool        active;         // 0  - не активное, 1- активное
        int         x;              // х  - окна развёрнутого (с левого верхнего угла)
        int         y;              // у  - окна развёрнутого (с левого верхнего угла)
        int         width;          // w  - ширина развёрнутого окна
        int         height;         // h  - высота развёрнутого окна
        int short   style;          // стиль окон*
        int short   allign;         // выравнивание окна: по левому краю, по центру, по правому краю;
        char        caption[ 32 ];  // заголовок окна
 
    //--- прототипы функций ----
    //public:
        window( char caption[], int x, int y, int width, int height, int short style );
        void DrawWindow(); // отрисовка окна
        void DestroyWindow( void );
};
Код глобальных переменных:
C++
1
2
int countWindows = 0;
window* objectList = static_cast< window* >( operator new( 1 * sizeof( window ) ) );
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
void CreateWindow( char caption[], int x, int y, int width, int height, int short style )
{
    if( countWindows > 0 )
    {
        window* FICTIM = (window*)objectList;
        operator delete( objectList );
        countWindows++;
        objectList = static_cast< window* >( operator new( ( countWindows ) * sizeof( window ) ) );
        window* p = objectList;
        for( int i = 0; i < countWindows - 1; ++i )
        {
            new( p++ ) window( FICTIM[ i ].caption, FICTIM[ i ].x, FICTIM[ i ].y, FICTIM[ i ].width, FICTIM[ i ].height, FICTIM[ i ].style );
        }
        strcpy( objectList[ countWindows - 1 ].caption, caption );
        objectList[ countWindows - 1 ].x = x;
        objectList[ countWindows - 1 ].y = y;
        objectList[ countWindows - 1 ].width = width;
        objectList[ countWindows - 1 ].height = height;
        objectList[ countWindows - 1 ].style = style;
        operator delete( FICTIM );
        objectList[ countWindows - 1 ].index = countWindows - 1;
    }
    else
    {
        countWindows++;
        window* p = objectList;
        new( p++ ) window( caption, x, y, width, height, style );
    }
}
 
void window :: DestroyWindow( void )
{
    operator delete( objectList );
    countWindows--;
    objectList = static_cast< window* >( operator new( ( countWindows ) * sizeof( window ) ) );
    window* p = objectList;
    for( int i = 0, j = 0; i < countWindows + 1; ++i )
    {
        if( index != i )
        {
            new( p++ ) window( FICTIM[ i ].caption, FICTIM[ i ].x, FICTIM[ i ].y, FICTIM[ i ].width, FICTIM[ i ].height, FICTIM[ i ].style );
            objectList[ j ].index = j;
            j++;
        }
    }
    operator delete( FICTIM );
}
Добавлено через 2 часа 0 минут
Разобрался) Спасибо всем^_^
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.12.2013, 19:36
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Динамический массив объектов класса (C++):

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

Динамический массив объектов класса - C++
Как вместо статически введённых 5 объектов использовать ввод переменной во время выполнения программы, которая будет иметь значение, а...

Динамический массив объектов класса в функции - C++
Здравствуйте! У меня данные хранятся в файле, и, чтобы их отсортировать, я решил извлекать их из файла и записывать в динамический...

Динамический массив объектов класса и считывание двоичных файлов - C++
Долго бьюсь и не могу понять. В этом варианте он выдает такую ошибку #include &lt;iostream&gt; #include &lt;fstream&gt; #include &lt;cstdlib&gt; ...

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

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

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.12.2013, 19:36
Привет! Вот еще темы с ответами:

Массив объектов класса как член другого класса - C++
Здравствуйте. У меня тут возникла проблемка #include &quot;main.h&quot; class player { public: player(); player(char*); ...

Массив объектов класса. Печать строк-членов класса. - C++
подскажите, как распечатать строки? #include &quot;myString.h&quot; #include &lt;iostream&gt; #define stop __asm nop void main() { ...

Динамический массив динамических объектов - C++
Физически задача поставлена так: есть узел который состоит из разных деталей, количество деталей в узле может быть разным; из узлов...

Как сделать динамический массив объектов? - C++
IContainer *C = new myString; Есть такая запись, нужно сделать массив из C. IContainer *C = new myString; такое не...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

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