6 / 6 / 5
Регистрация: 20.09.2016
Сообщений: 59
1

В массиве объектов класса все объекты заполняются данными последнего

07.11.2016, 22:18. Показов 864. Ответов 4
Метки нет (Все метки)

Есть задача: напишите программу, которая может выводить список членов по реальным именам, должностям, секретным именам и по предпочтению самого члена.
Я создал класс:
Кликните здесь для просмотра всего текста
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
62
63
64
65
66
67
class Member
    {
    private:
        char* _real_name;
        char* _secret_name;
        char* _title;
        short _preference;
    public:
        Member() {
            _real_name = new char[30];
            _secret_name = new char[30];
            _title = new char[30];
        }
        Member(char* real_name, char* secret_name, char* title, short preference = 1) :_preference(preference) {
            _real_name = new char[30];
            _secret_name = new char[30];
            _title = new char[30];
            _real_name = real_name;
            _secret_name = secret_name;
            _title = title;
        }
        char* getRealName()
        {
            return _real_name;
        }
        char* getSecretName()
        {
            return _secret_name;
        }
        char* getTitle()
        {
            return _title;
        }
        void setRealName(char* real_name)
        {
            _real_name = real_name;
        }
        void setSecretName(char* name)
        {
            _secret_name = name;
        }
        void setTitle(char* title)
        {
            _title = title;
        }
        void setPreference(short pref)
        {
            _preference = pref;
        }
        char* showByPreference()
        {
            if (_preference == 1)
                return getRealName();
            if (_preference == 2)
                return getSecretName();
            if (_preference == 3)
                return getTitle();
        }
 
 
 
        ~Member() {
            delete[] _real_name;
            delete[] _secret_name;
            delete[] _title;
        }
    };

Ну и собственно сама программа:
Кликните здесь для просмотра всего текста
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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
cout << "Скільки членів є у Вашому ордені? ";
    int n;
    cin >> n;
    cin.get();
    Member* Orden = new Member[n];
    /*Member Orden[5] = {
        {"Wimp Macho", "Macho", "Art Meneger", 1},
        {"Raki Rhodes", "Rak", "Meneger", 2},
        {"Janifer Aniston", "Rachel", "Seller", 3},
        {"Ross Galler", "Tyrex", "Paleontolog", 2},
        {"Joey Tribiani", "Joseph Stalin", "Actor", 3}
    };
    */
    for (int i(0); i < n; i++)
        Orden[i];
    char temp_name[30];
    char temp_secret[30];
    char temp_title[30];
    short temp_preference;
 
    for (int i(0); i < n; i++)
    {
        cout << "Введіть справжнє імя " << i + 1 << "члена ордену: ";
        
        cin.getline(temp_name, 30);
        Orden[i].setRealName(temp_name);
        cout << "Введіть секретне імя " << i + 1 << " члена ордену: ";
        
        cin.getline(temp_secret, 30);
        Orden[i].setSecretName(temp_secret);
        
        cout << "Введіть посаду " << i + 1 << " члена ордену: ";
        cin.getline(temp_title, 30);
        Orden[i].setTitle(temp_title);
        
        cout << "Введіть побажання " << i + 1 << " члена ордену: ";
        cin >> temp_preference;
        cin.get();
        Orden[i].setPreference(temp_preference);
    }
    system("cls");
    cout << "Рапорт про членів Благодійного Ордену Програмістів\n"
        << "a. показати за іменем\t\t\tb. показати за посадою\n"
        << "c. показати за секретним іменем\t\td. показати за побажанням\n"
        << "q. вихід\n";
    char ch;
    cout << "Зробіть свій вибір: : ";
    cin.get(ch);
    cin.get();
    while (ch != 'q' && ch != 'Q')
    {
        switch ((char)ch)
        {
        case 'A':
        case 'a':
            for (int i(0); i < n; i++)
                cout << Orden[i].getRealName() << endl;
            break;
        case 'B':
        case 'b':
            for (int i(0); i < n; i++)
                cout << Orden[i].getSecretName() << endl;
            break;
        case 'C':
        case 'c':
            for (int i(0); i < n; i++)
                cout << Orden[i].getTitle() << endl;
            break;
        case 'D':
        case 'd':
            for (int i(0); i < n; i++)
                cout << Orden[i].showByPreference() << endl;
            break;
        default:
            cout << "Неправильний ввід!\n";
            break;
        }
        cout << "Ваш наступний вибір: ";
        cin.get(ch);
        cin.get();
    }
 
 
 
 
    delete[] Orden;


Так вот, проблема в следующем: если вводить данные всех членов массива, то данные последнего, которого ввели записываются к всем остальным, кроме предпочтения, оно работает как надо.
вот пример:
Имя, секретное имя, должность и предпочтения:
1-го - Rachel, Green, Secret, 2
2-го - Ross, Galler, No, 3
и вот что получается на выводе.
Плюс выпрыгивает ошибка, после нажатия 'q'.
Обьясните пожалуйста, в чем проблема, что я сделал не так.
Миниатюры
В массиве объектов класса все объекты заполняются данными последнего   В массиве объектов класса все объекты заполняются данными последнего  
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.11.2016, 22:18
Ответы с готовыми решениями:

В массиве объектов все значения равны значению последнего объекта
Всем привет. Пытаюсь создать массив объектов (длинных чисел), однако в данном массиве сохраняется...

Перегрузка операции + с преобразованием объектов одного класса в объекты другого класса
Доброго времени суток! Изучаю ООП, при выполнении следующего задания возникли сложности: Создать...

Преобразование объектов одного класса в объекты другого
Есть сей код.Тут я пытаюсь осуществить преобразование объекта класса myCl к классу myCl2. Код...

Занести из файла объекты производных классов в массив объектов базового класса
Здравствуйте. Что в этом коде изменить, чтобы объекты производных классов заносились из файла?...

4
229 / 112 / 79
Регистрация: 17.10.2016
Сообщений: 312
07.11.2016, 22:24 2
Лучший ответ Сообщение было отмечено wolfdaver_77 как решение

Решение

Вот уже ошибка, так строки не копируют
Цитата Сообщение от wolfdaver_77 Посмотреть сообщение
_real_name = real_name;
_secret_name = secret_name;
_title = title;
понадобится функция strcpy.
Для с++ вместо массива char лучше std::string.
1
6 / 6 / 5
Регистрация: 20.09.2016
Сообщений: 59
07.11.2016, 22:36  [ТС] 3
John999, понял, спасибо)
но проблема не в этом конструкторе, а в методах Сет, если там исправить эту ошибку, то всё должно заработать, да?
0
229 / 112 / 79
Регистрация: 17.10.2016
Сообщений: 312
07.11.2016, 22:37 4
Цитата Сообщение от wolfdaver_77 Посмотреть сообщение
то всё должно заработать, да?
не знаю, исправь посмотрим.
0
6 / 6 / 5
Регистрация: 20.09.2016
Сообщений: 59
07.11.2016, 22:55  [ТС] 5
John999, заработало)
спасибо огромное)
а делаю я с char, а не string потому что проблемы всегда с такими строками, пытаюсь лучше выучить)
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.11.2016, 22:55

При инициализации почему-то во все объекты записываются данные последнего
Решил я немного разобраться с наследованием в JS, что то смог более менее понять сам, а что то не...

Как найти в массиве объектов объекты, которые очень близки по координатам?
не могу понять как это сделать

Как объявить массив объектов одного класса в другом классе, а затем поместить в него объекты?
Как объявить массив объектов одного класса в другом классе, а затем поместить в него объекты?

Как узнать все имеющиеся объекты класса?
Всем доброго времени суток! У меня есть класс Cat, в котором я создаю объекты (новых кошек). И как...


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

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

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