Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.66/35: Рейтинг темы: голосов - 35, средняя оценка - 4.66
40 / 40 / 32
Регистрация: 22.10.2012
Сообщений: 217
1

Создать расширенный класс СТУДЕНТ

01.04.2014, 18:11. Показов 6680. Ответов 20
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здраствуйте, есть довольно не малое задание, код которого почти полностью представлен ниже:

Задание:
1. Создать класс СТУДЕНТ, который вмещает фамилию, им'я, отчество, номер курса, id номер, рейтинг(100 бальная шкала).
2.Определить конструктор инициализации, копирования, деструктор и методы для чтения и изменения значений полей данных класса.
3. Перегрузить операцию инкремента(++) (дружеская к классу функция) для изменения курса, операцию =, потоковие операции ввода-вывода(<<, >>) обьектов.
4. Создать класс - потомок ДИПЛОМНИКИ, который вмещает тему дипломной работы(строка символов) и процент выполнения етой роботы в даный момент. Определить конструкторы, деструктор и метод для изменения назвы дипломной работы.
5. В границах иерархии класов создать полиморфический кластер для чтения полей-строк символов(имени студента или названия дипломной работы). Продемонстрировать механизм познего связывания.
6. Создать класс ГРУПА, который вмещает массив обьектов класса ДИПЛОМНИК. Определить фамилии студентов, процент выполнения дипломной роботы > 80%.
7. Для роботы с массивом обьектов использовать класс - итератор.

Сообственно программа работает. Но было бы очень хорошо, если кто-то бы смог направить меня на правильность написания етой програмы, правильность инкапсуляции, полиморфизма и другого в даном коде, т.к. мой код очень ужасен(посмотрев, вы поймете о чем я) . Буду ОЧЕНЬ благодарен за помощь в переработке на хорошый код и прочее замечания.
// Програма включает все, кроме строки с курсивом в 6 пункте. Извиняйте что без коментариев(

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
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
#include <iostream>
#include <cstdlib>
#include <fstream>
#include <string>
 
#include <vector>
 
using namespace std;
 
class Student {
 
private:
 
    string surName;
    string name;
    string last;
    int course;
    int id;
    float raiting;
 
public:
    //empty constructor
    Student(void){
    }
 
    Student(string surName, string name, string last, int course, int id, float raiting) {
        this->surName = surName;
        this->name = name;
        this->last = last;
        this->course = course;
        this->id = id;
        this->raiting = raiting;
    }
 
    Student(const Student& student) {
        this->surName = student.surName;
        this->name = student.name;
        this->last = student.last;
        this->course = student.course;
        this->id = student.id;
        this->raiting = student.raiting;
 
        setSurName(surName);
        setName(name);
        setLast(last);
        setCourse(course);
        setId(id);
        setRaiting(raiting);
    }
 
    ~Student() {}
 
    void Student::setSurName(string surName) {
        cout << "Vvedit prizvuwe: " << endl;
        cin >> surName;
 
        this->surName = surName;
    }
 
    string Student::getSurName() {
        return this->surName;
    }
 
    void Student::setName(string name) {
        cout << "Vvedit imya: " << endl;
        cin >> name;
 
        this->name = name;
    }
 
    string Student::getName() {
        return this->name;
    }
 
    void Student::setLast(string last) {
        cout << "Vvedit po-batkovi: " << endl;
        cin >> last;
 
        this->last = last;
    }
 
    string Student::getLast() {
        return this->last;
    }
 
    void Student::setCourse(int course) {
        cout << "Vvedit kyrs: " << endl;
        cin >> course;
 
        this->course = course;
    }
 
    int Student::getCourse() {
        return this->course;
    }
 
    void Student::setId(int id) {
        cout << "Vvedit id: " << endl;
        cin >> id;
 
        this->id = id;
    }
 
    int Student::getId() {
        return this->id;
    }
 
    void Student::setRaiting(float raiting) {
        cout << "Vvedit reitung: " << endl;
        cin >> raiting;
 
        this->raiting = raiting;
    }
 
    float Student::getRaiting() {
        return this->raiting;
    }
 
    //virtual
    virtual void Student::setDWork(char* dWork) {
        cout << "Test class Student!" << endl;
    }
    //\virtual
 
    friend Student& operator ++(Student& left);
 
    Student& operator = (const Student& right) {
 
        //test same recognition
        if (this == &right) {
            return *this;
        }
 
        surName = right.surName;
        name = right.name;
        last = right.last;
        course = right.course;
        id = right.id;
        raiting = right.raiting;
        return *this;
    }
 
    friend std::ostream& operator << (std::ostream& out, Student const& data);
    friend std::istream& operator >> (std::istream& in, Student& data);
 
};
 
Student& operator ++(Student& left) {
    left.course++;
    return left;
}
 
std::ostream& operator << (std::ostream& out, Student const& data) {
    return (out << "SurName: " << data.surName << "\nName: " << data.name << "\nLastName: " << data.last
                << "\nCourse: " << data.course << "\nId: " << data.id << "\nRaiting: " << data.raiting);
}
 
std::istream& operator >> (std::istream& in, Student& data) {
    return (in >> data.surName >> data.name >> data.last >> data.course >> data.id >> data.raiting);
}
 
 
 
class Graduate : public Student {
 
private:
 
    string surName = getSurName();
    string name = getName();
    string last = getLast();
    int course = getCourse();
    int id = getId();
    float raiting = getRaiting();
 
    char buf[80];
    char* dWork = buf;
    float percent;
    Student student = Student(surName, name, last, course, id, raiting);
 
public:
 
    Graduate(void) :student() {
        studentInfo();
        setDWork();
        setPercentNow();
    }
 
    Graduate(float raiting) {
    }
 
    Graduate(char* dWork, float percent, Student student) {
        this->student = student;
        this->percent = percent;
    }
 
    Graduate(const Graduate& graduate)  :student() {
        studentInfo();
        setPercentNow();
 
        //late binding mechanizm
        Graduate dWorkObject;
        Graduate& link = dWorkObject;
        link.setDWork();
    }
 
    ~Graduate() {}
 
    void Graduate::studentInfo() {
        student.setSurName(surName);
        student.setName(name);
        student.setLast(last);
        student.setCourse(course);
        student.setId(id);
        student.setRaiting(raiting);
    }
 
    virtual void Graduate::setDWork() {
        cout << "Vvedit temy duplomnoji: " << endl;
        cin >> dWork;
 
        this->dWork = dWork;
    }
 
    char* Graduate::getDWork() {
        return this->dWork;
    }
 
    void Graduate::setPercentNow() {
        cout << "Vvedit procent vukonanoi robotu na danui moment: " << endl;
        cin >> percent;
 
        this->percent = percent;
    }
 
    float Graduate::getPercentNow() {
        return this->percent;
    }
 
    friend std::ostream& operator << (std::ostream& out, Graduate const& data);
};
 
std::ostream& operator << (std::ostream& out, Graduate const& data) {
    return (out << "\nTema duplomnoi: " << data.dWork << "\nProcent vukonannya na danui moment: " << data.percent
                << "\n" << data.student);
}
 
 
class Group {
 
private:
    float raiting;
    unsigned int count = 0;
 
public:
 
    Group(void) {
        catalog();
    }
 
    Group(Group& group) {
        group.catalog();
    }
 
    ~Group() {}
 
    void Group::catalog() {
        cout << "Enter count students in group: ";
        cin >> count;
 
        //creating container 'vector'
        vector<Graduate> numbers(count);
 
        //iterator point on container 'vector'
        vector<Graduate>::iterator i;
 
        //clear screen
        system("cls");
 
        cout << "Student catalog: \n" << endl;
 
        for (i = numbers.begin(); i < numbers.end(); i++) {
                cout << *i << endl;
        }
    }
 
};
 
 
int main(void) {
    
    Group object;
 
    return 0;
}
Пример вывода:
Миниатюры
Создать расширенный класс СТУДЕНТ  
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.04.2014, 18:11
Ответы с готовыми решениями:

Создать класс "Студент" и классы "Бюджетный студент" и "Коммерческий студент"
Доброго времени суток. Помогите с задачкой. Наследование. Создать класс студент и классы бюджетный...

Не получается заполнить массивы. Создать класс студент
Пожалуйста помогите найти ошибку в коде. Выдает ошибку на выполнении. #pragma...

Создать базовый класс «Учащийся» и производные классы «Школьник» и «Студент»
Создать базовый класс «Учащийся» и производные классы «Школьник» и «Студент». Создать массив...

Создать класс "Студент" и добавить поля
создать класс студент ,имеющий ФИО,дату рождения, контактный телефон, город, страну, название...

20
5499 / 4894 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
01.04.2014, 18:30 2
Вот этого у вас нет.
Цитата Сообщение от 3Doleg Посмотреть сообщение
6. Создать класс ГРУПА, который вмещает массив обьектов класса ДИПЛОМНИК.
0
40 / 40 / 32
Регистрация: 22.10.2012
Сообщений: 217
01.04.2014, 18:43  [ТС] 3
alsav22, вроде есть, 248 - 286 строки)
0
5499 / 4894 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
01.04.2014, 18:45 4
Где, в этом классе, массив обьектов класса ДИПЛОМНИК?
0
40 / 40 / 32
Регистрация: 22.10.2012
Сообщений: 217
01.04.2014, 18:48  [ТС] 5
alsav22, я сделал так, правда не уверен что правильно:
C++
1
vector<Graduate> numbers(count)
Добавлено через 1 минуту
alsav22, но вы правы, в самом класе нету, только в методе..
0
5499 / 4894 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
01.04.2014, 18:57 6
Это же локальный объект, который исчезает при выходе из метода. Класс о нём ничего и не знает.
0
40 / 40 / 32
Регистрация: 22.10.2012
Сообщений: 217
01.04.2014, 18:59  [ТС] 7
alsav22, т.е. объявить это в теле класса?
0
5499 / 4894 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
01.04.2014, 19:03 8
Цитата Сообщение от 3Doleg Посмотреть сообщение
т.е. объявить это в теле класса?
Если следовать заданию, то не вижу других вариантов.
1
40 / 40 / 32
Регистрация: 22.10.2012
Сообщений: 217
01.04.2014, 19:04  [ТС] 9
alsav22, спасибо, прошу вас посмотреть код и написать еще замечания)
0
5499 / 4894 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
01.04.2014, 19:23 10
C++
1
2
3
string Student::getSurName() {
        return this->surName;
    }
Указывать в классе принадлежность к этому классу - лишнее (а mingw, такое, вообще не пропускает).
Среда какая?
1
40 / 40 / 32
Регистрация: 22.10.2012
Сообщений: 217
01.04.2014, 19:24  [ТС] 11
alsav22, Visual Studio 2013, про принадлежность учту)

Добавлено через 39 секунд
alsav22, *Professional
0
5499 / 4894 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
01.04.2014, 19:44 12
get-еры костантными делают (вообще, все мтоды, которые не должны менять данные).
Вот это лишнее:
C++
1
2
3
4
5
6
7
8
9
10
11
class Graduate : public Student {
 
private:
 
    string surName = getSurName();
    string name = getName();
    string last = getLast();
    int course = getCourse();
    int id = getId();
    float raiting = getRaiting();
...
Из пустого в порожнее. Всё это в конструкторах инициализируется.
1
40 / 40 / 32
Регистрация: 22.10.2012
Сообщений: 217
01.04.2014, 19:46  [ТС] 13
alsav22, спасибо, учту, еще что-то?)
0
5499 / 4894 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
01.04.2014, 19:49 14
И вот это непонятно зачем (там же):
C++
1
Student student = Student(surName, name, last, course, id, raiting);
Добавлено через 1 минуту
Цитата Сообщение от 3Doleg Посмотреть сообщение
еще что-то?
Инициализацию полей класса лучше делать не в теле конструктора, а в списке инициализаторов.
1
40 / 40 / 32
Регистрация: 22.10.2012
Сообщений: 217
01.04.2014, 19:58  [ТС] 15
alsav22, спасибо, а что вы скажете об методе, в строке 208, мне кажется так не должно быть?)
0
5499 / 4894 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
01.04.2014, 20:05 16
В задании идёт речь о полиморфизме, значит наследуемые методы должны быть виртуальными (и деструктор).

Добавлено через 3 минуты
Цитата Сообщение от 3Doleg Посмотреть сообщение
а что вы скажете об методе, в строке 208, мне кажется так не должно быть?)
Он должен быть в Student.
0
40 / 40 / 32
Регистрация: 22.10.2012
Сообщений: 217
01.04.2014, 20:10  [ТС] 17
alsav22,
Цитата Сообщение от alsav22 Посмотреть сообщение
В задании идёт речь о полиморфизме, значит наследуемые методы должны быть виртуальными (и деструктор).
Если можно, то обьясните пожалуйста..
0
5499 / 4894 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
01.04.2014, 20:37 18
Читаем:
Цитата Сообщение от 3Doleg Посмотреть сообщение
5. В границах иерархии класов создать полиморфический кластер для чтения полей-строк символов(имени студента или названия дипломной работы). Продемонстрировать механизм познего связывания.
Насчёт полиморфического кластера, туманно, сам не понимаю, что имеется ввиду.
Понимаю так, что в классе Student и в классе Graduate должен быть виртуальный метод (наприме, Info), который в Student будет выдавать информацию о студенте, а в Graduate о дипломной работе.
1
40 / 40 / 32
Регистрация: 22.10.2012
Сообщений: 217
01.04.2014, 20:45  [ТС] 19
alsav22, отличная идея, большое спасибо за ответы)
Еще последний вопрос если можно: как по вашему мнению будет выглядеть вызов в методе main ?
Я думаю мой не очень уж хороший)
0
5499 / 4894 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
03.04.2014, 17:21 20
Цитата Сообщение от 3Doleg Посмотреть сообщение
как по вашему мнению будет выглядеть вызов в методе main ?
Обычно, меню делают.
1
03.04.2014, 17:21
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.04.2014, 17:21
Помогаю со студенческими работами здесь

Создать класс "Студент", имеющий имя (указатель на строку), курс и идентификационный номер
Создать класс студент, имеющий имя (указатель на строку), курс и идентификационный номер....

Создать класс "студент"
Помогите написать программу, пожалуйста. Вот задание: Класс - студент. Параметры (поля): ФИО,...

Создать класс "Студент"
Помогите пожалуйста решить задачу) Создать класс «студент» с компонентными данными: фамилия,...

Разработать класс Man (человек) и производный класс Student (студент). Описать атрибуты.
Разработать класс Man (человек) и производный класс Student (студент). Описать атрибуты.

Реализовать базовый класс Человек и класс-наследник Студент
Создать базовый класс Человек. Каждый объект этого класса должен содержать ФИО, год рождения и пол....

Класс Студент
Вообщем задания таково: &quot;Класс &quot;Студент&quot;. Действия над объектами класса: начисление стипендии,...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru