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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.83
3Doleg
40 / 40 / 15
Регистрация: 22.10.2012
Сообщений: 217
#1

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

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

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

Задание:
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
Миниатюры
Создать расширенный класс СТУДЕНТ  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.04.2014, 18:11
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Создать расширенный класс СТУДЕНТ (C++):

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

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

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

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

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

Создать класс "студент" - C++
Помогите написать программу, пожалуйста. Вот задание: Класс - студент. Параметры (поля): ФИО, массив экзаменационных оценок (m=4)....

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
alsav22
5419 / 4815 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
01.04.2014, 20:05 #16
В задании идёт речь о полиморфизме, значит наследуемые методы должны быть виртуальными (и деструктор).

Добавлено через 3 минуты
Цитата Сообщение от 3Doleg Посмотреть сообщение
а что вы скажете об методе, в строке 208, мне кажется так не должно быть?)
Он должен быть в Student.
0
3Doleg
40 / 40 / 15
Регистрация: 22.10.2012
Сообщений: 217
01.04.2014, 20:10  [ТС] #17
alsav22,
Цитата Сообщение от alsav22 Посмотреть сообщение
В задании идёт речь о полиморфизме, значит наследуемые методы должны быть виртуальными (и деструктор).
Если можно, то обьясните пожалуйста..
0
alsav22
5419 / 4815 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
01.04.2014, 20:37 #18
Читаем:
Цитата Сообщение от 3Doleg Посмотреть сообщение
5. В границах иерархии класов создать полиморфический кластер для чтения полей-строк символов(имени студента или названия дипломной работы). Продемонстрировать механизм познего связывания.
Насчёт полиморфического кластера, туманно, сам не понимаю, что имеется ввиду.
Понимаю так, что в классе Student и в классе Graduate должен быть виртуальный метод (наприме, Info), который в Student будет выдавать информацию о студенте, а в Graduate о дипломной работе.
1
3Doleg
40 / 40 / 15
Регистрация: 22.10.2012
Сообщений: 217
01.04.2014, 20:45  [ТС] #19
alsav22, отличная идея, большое спасибо за ответы)
Еще последний вопрос если можно: как по вашему мнению будет выглядеть вызов в методе main ?
Я думаю мой не очень уж хороший)
0
alsav22
5419 / 4815 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
03.04.2014, 17:21 #20
Цитата Сообщение от 3Doleg Посмотреть сообщение
как по вашему мнению будет выглядеть вызов в методе main ?
Обычно, меню делают.
1
3Doleg
40 / 40 / 15
Регистрация: 22.10.2012
Сообщений: 217
06.04.2014, 20:59  [ТС] #21
Никто не подскажет, как без индуского кода выполнить следущее задание?
Определить фамилии студентов, процент выполнения дипломной роботы > 80%
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.04.2014, 20:59
Привет! Вот еще темы с ответами:

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

Класс Студент - C++
#include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; //базовый класс &quot;студент&quot; class CStudent { protected: char...

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

Определите класс «Студент» - C++
Помогите пожалуйста с задачей Определите класс «Студент».Методы – перевод на следующий курс, выпуск, отчисление. Разработать...


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

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

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