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

Не срабатывает конструктор объекта - C++

Восстановить пароль Регистрация
 
baron
0 / 0 / 0
Регистрация: 06.05.2014
Сообщений: 4
06.05.2014, 15:49     Не срабатывает конструктор объекта #1
Здравствуйте, уважаемые форумчане. Это моё первое сообщение на форуме, поэтому прошу сильно не пинать, если не там создал тему или спросил то, на что есть ответ в недрах форума. Просто даже не знаю, как сформулировать запрос для поиска. Метания по Гуглу не привели к успеху. Поэтому я здесь.
Ситуация у меня возникла такая. Я создал класс, который содержит массив элементов типа char. Класс объявлен в отдельном заголовочном файле, его реализация в другом файле. Написан конструктор для этого класса, не принимающий параметров, который случайно располагает определённые символы в массиве (случайная их позиция). При создании экземпляра этого класса конструктор работает нормально, каждый раз при запуске программы символы получаются в произвольном порядке. Но вот если объявить несколько экземпляров этого класса, то у каждого из них совершенно одинаковая картина в расположении символов. Такое впечатление, что для второго и последующих экземпляров класса не срабатывает каждый раз конструктор, а тупо копируются данные из первого объявленного экземпляра. На экран выводится та же последовательность символов. При чём в режиме отладки программы при пошаговом прохождении по строкам кода конструктор срабатывает для каждого объекта, и всё получается, как нужно. Без отладки - случайности нет. Как сделать, чтобы при каждом объявлении объекта срабатывал конструктор? Спасибо за помощь.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
06.05.2014, 15:52     Не срабатывает конструктор объекта #2
Телепатов нет, показывайте код.
Прежде всего рекомендуется к вдумчивому прочтению: http://sscce.org/
nmcf
4298 / 3719 / 1252
Регистрация: 14.04.2014
Сообщений: 14,541
06.05.2014, 15:54     Не срабатывает конструктор объекта #3
Случайное заполнение используешь? Вот эту тему посмотри, там отвечали: Рандомизация игры "Сапёр"
baron
0 / 0 / 0
Регистрация: 06.05.2014
Сообщений: 4
06.05.2014, 16:07  [ТС]     Не срабатывает конструктор объекта #4
Собственно код.
Заголовочный файл с объявлением класса:
C++
1
2
3
4
5
6
7
8
9
10
11
12
# ifndef BANDIT_H
# define BANDIT_H
 
class Queue{
private:
    char symbols[12];
public:
    Queue();
    void GetSymbols();
    void ShiftQueue(); // смещение очереди на 1 элемент вперёд. Первый становится последним (кольцо)
};
# endif BANDIT_H
Файл с определением класса:
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# include <iostream>
# include <time.h>
# include "bandit.h"
 
 
 
Queue::Queue()
{
    char * temp = new char[12];
    int * arr = new int[12];
    int count = 0, pos, i;
    bool p = false;
    for (i = 0; i < 12; i++)
        arr[i] = -1;
    for (i = 0; i < 12; i++)
        temp[i] = 1 + i;
    temp[6] = 11;
    temp[7] = 12;
    temp[8] = '$';
    temp[9] = 206;
    temp[10] = 176;
    temp[11] = '#';
    srand(time(NULL));
    while (count < 12) // блок while для рамдомного заполнения массива symbols значками из временного массива temp
    {
        while (!p)
        {
            p = true;
            pos = rand() % 12;
            for (i = 0; i < 12; i++)
            {
                if (pos == arr[i])
                {
                    p = false;
                    break;
                }
            }
        } 
            symbols[count] = temp[pos];
            arr[count] = pos;
            count++;
            p = false;
    }
    delete[] temp;
    delete[] arr;
}
 
void Queue::GetSymbols()
{
    for (int i = 0; i < 12; i++)
        std::cout << " " << symbols[i] << " ";
}
 
void Queue::ShiftQueue()
{
    char ch = symbols[0];
    int i;
        for (i = 1; i < 12; i++)
            symbols[i - 1] = symbols[i];
        symbols[i - 1] = ch;
}
Файл с main() функцией:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# include "bandit.h"
# include <iostream>
using namespace std;
 
void main()
{
    Queue q1;
    Queue q2;
    Queue q3;
    q1.GetSymbols();
    cout << endl;
    q2.GetSymbols();
    cout << endl;
    q3.GetSymbols();
    cout << endl;
    cin.get();
}
0x10
2425 / 1597 / 232
Регистрация: 24.11.2012
Сообщений: 3,919
06.05.2014, 16:09     Не срабатывает конструктор объекта #5
baron, srand нужно вынести куда-нибудь. Тут получается, что если объекты создаются в одно время, то seed для генератора всегда один и тот же - как следствие, генерятся одинаковые последовательности.
baron
0 / 0 / 0
Регистрация: 06.05.2014
Сообщений: 4
06.05.2014, 16:16  [ТС]     Не срабатывает конструктор объекта #6
0x10,А куда ж его вынести?
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
06.05.2014, 16:20     Не срабатывает конструктор объекта #7
в мейн!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.05.2014, 16:58     Не срабатывает конструктор объекта
Еще ссылки по теме:

C++ Зачем нужен конструктор объекта ostringstream (строковый поток который) с двумя аргументами?
C++ Зачем в программе 2 раза вызывать конструктор для одного объекта
C++ Как вызвать другой конструктор для уже созданного объекта конструктором по умолчанию?

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

Или воспользуйтесь поиском по форуму:
baron
0 / 0 / 0
Регистрация: 06.05.2014
Сообщений: 4
06.05.2014, 16:58  [ТС]     Не срабатывает конструктор объекта #8
Всем спасибо. Помогло!!!
Yandex
Объявления
06.05.2014, 16:58     Не срабатывает конструктор объекта
Ответ Создать тему
Опции темы

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