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

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

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

Неисправный код - C++

19.11.2014, 15:23. Просмотров 154. Ответов 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
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
#include<iostream>
#define CHAR_LENGTH 200
#define NOTHING_FOUND -1
 
class Student {
private:
    char* name;
    char* lastName;
    int iq;
 
    void init() {
        name = new char[CHAR_LENGTH] {};
        lastName = new char[CHAR_LENGTH] {};
    }
 
public:
    Student() {
        init();
        iq = 0;
    }
 
    Student(char* _name, char* _lastName, int _iq) {
        init();
        strncpy_s(name, CHAR_LENGTH, _name, strlen(_name));
        strncpy_s(lastName, CHAR_LENGTH, _lastName, strlen(_lastName));
        iq = _iq;
    }
 
    ~Student() {
        delete[] name;
        delete[] lastName;
    }
 
    char* getName() {
        return name;
    }
 
    char* getLastName() {
        return lastName;
    }
 
    int getIq() {
        return iq;
    }
 
    bool equals(Student* student) {
        return  strncmp(name, student->name, CHAR_LENGTH) == 0 &&
            strncmp(lastName, student->lastName, CHAR_LENGTH) == 0 &&
            iq == student->iq;
    }
 
    void show() {
        using namespace std;
        cout << "Name: " << name << " Last name: " << lastName << " IQ: " << iq << endl;
    }
};
 
class Group {
private:
    Student* students;
    int groupSize;
    int currentSize;
 
    void init(int _groupSize) {
        students = new Student[_groupSize];
        groupSize = _groupSize;
        currentSize = 0;
    }
 
    int findStudent(Student* student) {
        for (int i = 0; i < currentSize; i++) {
            if (students[i].equals(student)) {
                return i;
            }
        }
 
        return NOTHING_FOUND;
    }
 
public:
    Group() {
        init(20);
    }
 
    Group(int groupSize) {
        init(groupSize);
    }
 
    ~Group() {
        delete[] students;
    }
 
    bool addStudent(Student* student) {
        if (currentSize >= groupSize) {
            return false;
        }
 
        students[currentSize++] = Student(student->getName(), student->getLastName(), student->getIq());
        return true;
    }
 
    bool removeStudent(Student* student){
        return removeStudent(findStudent(student));
    }
 
    bool removeStudent(int index) {
        if (index < 0 || index >= currentSize) {
            return false;
        }
 
        for (int i = index; i < currentSize - 1; i++)
        {
            std::swap(students[i], students[i + 1]);
        }
        --currentSize;
        return true;
    }
 
    void show() {
        for (int i = 0; i < currentSize; i++) {
            students[i].show();
        }
    }
};
 
void main(){
    Student vasya("Vasya", "Pipkin", 1200);
    Student petya("Petya", "Pupkin", 100);
    Student grisha("Grigoriy", "Vasechkin", -500);
 
    Group group(5);
    group.addStudent(&vasya);
    group.addStudent(&petya);
    group.addStudent(&grisha);
 
    group.show();
 
    group.removeStudent(&vasya);
 
    group.show();
    system("pause");
 
}
его нужно исправить. Помогите пожалуйста, не могу понять, что не так. Препод намекнул что нужно написать конструктор копирования, но все равно не понятно.
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.11.2014, 15:23     Неисправный код
Посмотрите здесь:

Неисправный односвязный список - C++
Вот код: #include &quot;stdafx.h&quot; #include &quot;locale.h&quot; #include &quot;math.h&quot; #include &quot;conio.h&quot; #include &quot;iostream&quot; #include &quot;iomanip&quot; ...

Не получается запустить длинный код Алгоритма Гомори, код правильный. - C++
Собственно как запустить код через С++Builder 6 #include&lt;ctype.h&gt; #include&lt;string.h&gt; #include&lt;conio.h&gt; #include&lt;stdio.h&gt; ...

Нужно засунуть код инструкции в 4 char'a так, чтобы в памяти это был код инструкции. - C++
Доброго времени суток. Есть дизассемблированный код. Нужно засунуть код иструкции в 4 чара так, чтобы в памяти это был код инструкции. Как...

В чем разница между exit(код возврата) и ExitProcess (код возврата)? - C++
Я так себе представляю, имеется два варианта выхода из приложения, с передачей кода возврата: 1. Функцией ExitProcess(код возврата); 2....

Неисправный процессор? - Процессоры
Добрый день! Не то что бы я совсем чайник в компьютерах, но отрицать этого не стану. Проблема в следующем: Решил обновить...

Неисправный слот ОЗУ - Материнские платы
Здарова, пацаны. Если ОЗУ в слоте не до конца защёлкнуть, есть ли вероятность спалить слот ? (на саму ОЗУ уже пофиг) Дело в том, что я...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Гоблин-инженер
113 / 113 / 32
Регистрация: 18.09.2014
Сообщений: 337
19.11.2014, 15:30     Неисправный код #2
Spirit2222, а в чем проблемы? Лично у меня в Qt не компилит, strcmp ругается
Spirit2222
0 / 0 / 1
Регистрация: 02.11.2013
Сообщений: 32
19.11.2014, 15:37  [ТС]     Неисправный код #3
Проблема в том, что код не выводит то, что должен выводить, он выдает набор символов вместо слов
Гоблин-инженер
113 / 113 / 32
Регистрация: 18.09.2014
Сообщений: 337
19.11.2014, 15:45     Неисправный код #4
Spirit2222, вы же на с++ пишете... Используйте string. Проще же, что эти ваши манипуляции с init()... Ну если препод утверждает, что требуется добавить конструктор копирования, добавьте
C++
1
2
3
Student(const Student &original) {
// Создаем класс на основе другого, то есть просто копируем все поля
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.11.2014, 16:09     Неисправный код
Еще ссылки по теме:

Тормозит ОС. Подозрения на неисправный жесткий - Жесткие диски
Добрый день! Тормазит операционная система: загружается то быстро то долго, файлы открываются то сразу то с задержкой. Сначала думал вирусы...

продается неисправный radeon 6850 - Обо всем!
Карта сгорела (из-за неправильного подключения к телевизору), две лопасти сломаны. В использовании была полгода!

Обработка массивов - неисправный алгоритм - C#
Вот решал две задачи однотипных - и где-то спряталась ошибка :) Может, кто найдёт? (Задания у них внутри) Вот первая: static void...

Как диагностировать неисправный жесткий? - Жесткие диски
Люди здравствуйте!!! Подскажите пожалста как диагностировать умерший жесткий, как определить можно ли с него какую нибудь инфу вытащить...

Посоветуйте как восстановить неисправный cd диск? - Восстановление данных
Ошибка чтения при копировании файлов с cd диска. Посоветуйте как восстановить неисправный cd диск?

Неисправный ATX на GIGABYTE на GA-G33M-DS2R/S2 - Материнские платы
Всем привет. На плате есть разъем, ATX 12V. Если запитать его от блока питания, то срабатывает защита и блок питания уход в бесконечный...


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

Или воспользуйтесь поиском по форуму:
Ilot
Модератор
Эксперт С++
1807 / 1164 / 226
Регистрация: 16.05.2013
Сообщений: 3,060
Записей в блоге: 5
Завершенные тесты: 1
19.11.2014, 16:09     Неисправный код #5
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Добавил в класс Student оператор присвоения:
Кликните здесь для просмотра всего текста
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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
#include<iostream>
#include <cstring>
#define CHAR_LENGTH 200
#define NOTHING_FOUND -1
 
class Student {
private:
    char* name;
    char* lastName;
    int iq;
 
    void init() {
        name = new char[CHAR_LENGTH] {};
        lastName = new char[CHAR_LENGTH] {};
    }
 
public:
    Student() {
        init();
        iq = 0;
    }
 
    Student(char* _name, char* _lastName, int _iq) {
        init();
        strncpy(name, _name, strlen(_name));
        strncpy(lastName, _lastName, strlen(_lastName));
        iq = _iq;
    }
 
    ~Student() {
        delete[] name;
        delete[] lastName;
    }
 
    char* getName() {
        return name;
    }
 
    char* getLastName() {
        return lastName;
    }
 
    int getIq() {
        return iq;
    }
 
    bool equals(Student* student) {
        return  strncmp(name, student->name, CHAR_LENGTH) == 0 &&
            strncmp(lastName, student->lastName, CHAR_LENGTH) == 0 &&
            iq == student->iq;
    }
 
    void show() {
        using namespace std;
        cout << "Name: " << name << " Last name: " << lastName << " IQ: " << iq << endl;
    }
    Student& operator= (const Student& st) {
        strncpy(name, st.name, strlen(st.name));
        strncpy(lastName, st.lastName, strlen(st.lastName));
        iq = st.iq;
        return *this;
    }
};
 
class Group {
private:
    Student* students;
    int groupSize;
    int currentSize;
 
    void init(int _groupSize) {
        students = new Student[_groupSize];
        groupSize = _groupSize;
        currentSize = 0;
    }
 
    int findStudent(Student* student) {
        for (int i = 0; i < currentSize; i++) {
            if (students[i].equals(student)) {
                return i;
            }
        }
 
        return NOTHING_FOUND;
    }
 
public:
    Group() {
        init(20);
    }
 
    Group(int groupSize) {
        init(groupSize);
    }
 
    ~Group() {
        delete[] students;
    }
 
    bool addStudent(Student* student) {
        if (currentSize >= groupSize) {
            return false;
        }
        students[currentSize++] = *student;
 
        return true;
    }
 
    bool removeStudent(Student* student){
        return removeStudent(findStudent(student));
    }
 
    bool removeStudent(int index) {
        if (index < 0 || index >= currentSize) {
            return false;
        }
 
        for (int i = index; i < currentSize - 1; i++)
        {
            std::swap(students[i], students[i + 1]);
        }
        --currentSize;
        return true;
    }
 
    void show() {
        for (int i = 0; i < currentSize; i++) {
            students[i].show();
        }
    }
};
 
int main(){
    Student vasya("Vasya", "Pipkin", 1200);
    Student petya("Petya", "Pupkin", 100);
    Student grisha("Grigoriy", "Vasechkin", -500);
 
    Group group(5);
    group.addStudent(&vasya);
    group.addStudent(&petya);
    group.addStudent(&grisha);
 
    group.show();
 
    group.removeStudent(&vasya);
 
    group.show();
    //system("pause");
    return 0;
}

Вот здесь:
C++
1
2
3
4
5
6
    Student& operator= (const Student& st) {
        strncpy(name, st.name, strlen(st.name));
        strncpy(lastName, st.lastName, strlen(st.lastName));
        iq = st.iq;
        return *this;
    }
C++
1
2
3
4
5
6
7
8
    bool addStudent(Student* student) {
        if (currentSize >= groupSize) {
            return false;
        }
        students[currentSize++] = *student;
 
        return true;
    }
И вот здесь:
C++
1
2
3
4
5
6
7
8
    bool addStudent(Student* student) {
        if (currentSize >= groupSize) {
            return false;
        }
 
        students[currentSize++] = Student(student->getName(), student->getLastName(), student->getIq());
        return true;
    }
У вас происходила неприятная вещь. Указатели теперь стали указывать на один и тот же участок памяти, что приводило к падению программы при вызове деструкторов. Инкапсулируйте динамически выделяемые учаски памяти.
Yandex
Объявления
19.11.2014, 16:09     Неисправный код
Ответ Создать тему
Опции темы

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