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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Программа на С++ удаление цифр http://www.cyberforum.ru/cpp-beginners/thread1056451.html
Нужно удалить из каждой группы идущих подряд цифр, все цифры, начиная с третьей. Очень нужно сделать программу...
C++ Как проверить и написать в виде кода образуют ли дроби арифметическую прогрессию? Пожалуйста, подскажите как проверить и написать в виде кода образуют ли дроби арифметическую прогрессию? каждая пара целых чисел a1, b1, a2, b2,... определяет числитель и знаменатель натуральной дроби a/b. Очень срочно. http://www.cyberforum.ru/cpp-beginners/thread1056447.html
λ-выражение C++
Подскажите пожалуйста, как можно оформить λ-выражение, чтобы при помощи неё получить информацию о чётности/нечётности каждого элемента в объекте. Заранее спасибо)
Как удалить файл программой C++
Если можно приведите пример программы.
C++ сортировка http://www.cyberforum.ru/cpp-beginners/thread1056396.html
Составить алгоритм и программу Сортировка элементов прямоугольной структуры. Провести предварительное тестирование программы и убедиться в ее работоспособности. При этом должен быть реализован метод естественного слияния.
C++ Структуры с переменным кол-вом аргументов Суть задачи - создать "хранилище данных", которое может изменять как свои члены ( по типу, например была 1-ая колонка char типов, а стало нужно int, при этом удалить старые ), так и размер членов ( например длину char массива ). Как я понимаю структура не может дать мне желанной динамики, если так, то вопрос о реализации с помощью других способов. Например как мне видится, использовать... подробнее

Показать сообщение отдельно
toneysix
Сообщений: n/a
25.12.2013, 19:36     Динамический массив объектов класса
Добрый вечер. Столкнулся с проблемой изменения дин.массива объектов класса.
Сущность заключается в следующем:
Создан класс, который включает совокупность объектов одной природы. В процессе работы программы требуется проводить изменение этих объектов: их удаление и создание.
Создал массив, в который поместил объекты класса.
Описать казус происходящего несколько обременено, но все же:
Первый добавленный элемент - объект, частично создается некорректно: некоторые свойства объекта теряются, вместо их нормальных (установленных) значений содержится неосмысленная информация в виде непонятных чисел.
Также в силу первого удаление производится некорректно.
Код создания объекта:
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 минут
Разобрался) Спасибо всем^_^
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 17:42. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru