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

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

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

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

06.05.2014, 15:49. Просмотров 271. Ответов 7
Метки нет (Все метки)

Здравствуйте, уважаемые форумчане. Это моё первое сообщение на форуме, поэтому прошу сильно не пинать, если не там создал тему или спросил то, на что есть ответ в недрах форума. Просто даже не знаю, как сформулировать запрос для поиска. Метания по Гуглу не привели к успеху. Поэтому я здесь.
Ситуация у меня возникла такая. Я создал класс, который содержит массив элементов типа char. Класс объявлен в отдельном заголовочном файле, его реализация в другом файле. Написан конструктор для этого класса, не принимающий параметров, который случайно располагает определённые символы в массиве (случайная их позиция). При создании экземпляра этого класса конструктор работает нормально, каждый раз при запуске программы символы получаются в произвольном порядке. Но вот если объявить несколько экземпляров этого класса, то у каждого из них совершенно одинаковая картина в расположении символов. Такое впечатление, что для второго и последующих экземпляров класса не срабатывает каждый раз конструктор, а тупо копируются данные из первого объявленного экземпляра. На экран выводится та же последовательность символов. При чём в режиме отладки программы при пошаговом прохождении по строкам кода конструктор срабатывает для каждого объекта, и всё получается, как нужно. Без отладки - случайности нет. Как сделать, чтобы при каждом объявлении объекта срабатывал конструктор? Спасибо за помощь.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.05.2014, 15:49
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Не срабатывает конструктор объекта (C++):

this(Всегда ли вызывается конструктор при не явной передачи объекта в конструктор) - C++
class Test { int i; public: void test(int i) { this -> i = i; } }; Конструктор Test::Test всегда вызывается...

Не срабатывает конструктор перемещения - C++
Есть класс у которого удалён конструктор перемещения. Но тем не менее, при передаче обьекта данного класса в функцию по rvalue ссылке через...

Не срабатывает конструктор класса - C++
/* gamers.h */ #include <string> class gamers { public: gamers() { std::string nickname = "Hety"; std::string name =...

Не срабатывает move конструктор std::unique_ptr - C++
Всем привет! Битый час не пойму почему в списке захвата компилятор ругается на удаленный копирующий конструктор unique_ptr, если я его...

Почему не срабатывает конструктор копирования в пользовательском классе - C++
вроде со всем разобралась, но не заходит в конструктор копирования. В чём ошибка? #include <iostream> #include "welcome.h" ...

Конструктор. Создание нового объекта - C++
Всем привет, Пишу программу "Мой сборник CD". Как можно создавать объекты не вводя их количество в начале программы? Например, если...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
0x10
2464 / 1636 / 238
Регистрация: 24.11.2012
Сообщений: 4,029
06.05.2014, 15:52 #2
Телепатов нет, показывайте код.
Прежде всего рекомендуется к вдумчивому прочтению: http://sscce.org/
0
nmcf
5319 / 4639 / 1551
Регистрация: 14.04.2014
Сообщений: 18,452
06.05.2014, 15:54 #3
Случайное заполнение используешь? Вот эту тему посмотри, там отвечали: Рандомизация игры "Сапёр"
0
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();
}
0
0x10
2464 / 1636 / 238
Регистрация: 24.11.2012
Сообщений: 4,029
06.05.2014, 16:09 #5
baron, srand нужно вынести куда-нибудь. Тут получается, что если объекты создаются в одно время, то seed для генератора всегда один и тот же - как следствие, генерятся одинаковые последовательности.
1
baron
0 / 0 / 0
Регистрация: 06.05.2014
Сообщений: 4
06.05.2014, 16:16  [ТС] #6
0x10,А куда ж его вынести?
0
Kuzia domovenok
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,925
Записей в блоге: 1
06.05.2014, 16:20 #7
в мейн!
1
baron
0 / 0 / 0
Регистрация: 06.05.2014
Сообщений: 4
06.05.2014, 16:58  [ТС] #8
Всем спасибо. Помогло!!!
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.05.2014, 16:58
Привет! Вот еще темы с ответами:

Конструктор копии при возвращении объекта - C++
main(): #include&quot;Class_Taxi.h&quot; #include&lt;vld.h&gt; #include&lt;iostream&gt; #include&lt;locale.h&gt; #define MAX 15 using namespace std; ...

Определение объекта, который вызвает конструктор. - C++
Привет! Подскажите пожалуйста, как определить, какой из объектов в программе (программа очень большая и писал ее не я) вызывает...

Какой конструктор вызывается при value initialization объекта? - C++
Привет, есть вот такой код, например: #include &lt;iostream&gt; struct Test { int data; Test() : data(30) { std::cout &lt;&lt;...

Как вызвать конструктор для неизвестного объекта? - C++
Добрый вечер. Помогите мне с задачей. Хочу написать шаблонный класс вектор. И в конструкторе по умолчанию нужно прописать конструкцию...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
06.05.2014, 16:58
Ответ Создать тему
Опции темы

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