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

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

Восстановить пароль Регистрация
 
toneysix
Сообщений: n/a
25.12.2013, 19:36     Динамический массив объектов класса #1
Добрый вечер. Столкнулся с проблемой изменения дин.массива объектов класса.
Сущность заключается в следующем:
Создан класс, который включает совокупность объектов одной природы. В процессе работы программы требуется проводить изменение этих объектов: их удаление и создание.
Создал массив, в который поместил объекты класса.
Описать казус происходящего несколько обременено, но все же:
Первый добавленный элемент - объект, частично создается некорректно: некоторые свойства объекта теряются, вместо их нормальных (установленных) значений содержится неосмысленная информация в виде непонятных чисел.
Также в силу первого удаление производится некорректно.
Код создания объекта:
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 минут
Разобрался) Спасибо всем^_^
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.12.2013, 19:36     Динамический массив объектов класса
Посмотрите здесь:

Динамический массив объектов C++
Массив объектов класса. Печать строк-членов класса. C++
C++ динамический массив объектов
C++ Динамический массив объектов
Создать динамический массив объектов, инициализировать его C++
C++ Передача в функцию динамический массив объектов первого и второго типа
C++ Как сделать динамический массив объектов?
C++ Динамический массив динамических объектов

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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