Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Sasha0001
1 / 1 / 0
Регистрация: 30.09.2017
Сообщений: 30
1

Реализовать базовый класс Человек и класс-наследник Студент

13.05.2018, 12:35. Просмотров 222. Ответов 4

Создать базовый класс Человек. Каждый объект этого класса должен содержать ФИО, год рождения и пол. Необходимые функции: ввод-вывод информации. Создать класс-наследник Студент, который имеет дополнительные данные: год вступления в вуз, номер зачетки, кол-во дисциплин, сами дисциплины(динамический массив), и средний балл. Необходимые функции: ввод информации, добавление дисциплин, рассчет среднего балла, и вывод информации введенной в классе Человек+вся информация из класса Студент.

Код в принципе работает, но есть пара вопросов, с которыми прошу помощи:
1. Почему хотя я задала ser_bal типом float, сам средний балл оно выводит без значений после запятой и как это исправить?
2. Я немного запуталась с наследованием, и не уверена что правильно организовала вывод информации в функции "void show(string PIB, int year, string sex)" возможно надо делать как-то вроде "void show(people obj1)", но все мои попытки были оспорены компилятором, поэтому прошу совет.

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
#include <iostream>
#include <string>
 
using namespace std;
 
struct dis
{
    string disc;
    int mark;
};
 
class people {
    public:
    string PIB;
    int year;
    string sex;
    
    void input();
    void show();
};
 
class student: public people {
    public:
    int entering_year;
    int record_book_number;
    int disciplina;
    dis *d;
    float ser_bal;
    void input_data();
    void input_disciplina();
    void count(int disciplina, dis *d);
    void show(string PIB, int year, string sex);    
};
 
void people::input(){
        cout<<"Input PIB:";
        getline(cin,PIB);
        cout<<endl;
        cout<<"Input year:";
        cin>>year;
        cout<<endl;
        cout<<"Input sex:";
        cin>>sex;
        cout<<endl;
}
 
void people::show() {
    cout<<"PIB:"<<PIB<<endl;
    cout<<"Year:"<<year<<endl;
    cout<<"sex:"<<sex<<endl;
}
 
void student::input_data() {
    cout<<"Input entering year:";
    cin>>entering_year;
    cout<<endl;
    cout<<"Input record book number:";
    cin>>record_book_number;
    cout<<endl;
    cout<<"Input number of disciplinas:";
    cin>>disciplina;
    cout<<endl;
}
 
void student::input_disciplina() {
    d = new dis[disciplina];
    for(int i=0; i<disciplina; i++)
    {
    cout<<"Disciplina:";
    cin>>d[i].disc;
    cout<<"Mark:";
    cin>>d[i].mark;
    }
}
 
void student::count(int disciplina, dis *d) {
int k=0;
for(int i=0; i<disciplina; i++) 
{
    k+=d[i].mark;
}
ser_bal=k/disciplina;
cout<<"Ser.Ball="<<ser_bal<<endl;
}
 
void student::show(string PIB, int year, string sex){
    cout<<"PIB:"<<PIB<<endl;
    cout<<"Year:"<<year<<endl;
    cout<<"sex:"<<sex<<endl;
    cout<<"Entering year:"<<entering_year<<endl;
    cout<<"Record book number:"<<record_book_number<<endl;
    cout<<"Number of disciplinas"<<disciplina<<endl;
    for(int i=0; i<disciplina; i++)
    {
    cout<<"Disciplina:"<<d[i].disc;
    cout<<"Mark:"<<d[i].mark;
    cout<<endl;
}
}
 
int main()
{
    people obj1;
    student obj2;
    obj1.input();
    obj1.show();
    obj2.input_data();
    obj2.input_disciplina();
    obj2.count(obj2.disciplina, obj2.d);
    obj2.show(obj1.PIB, obj1.year, obj1.sex);
    system("pause");
    return 0;
    
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.05.2018, 12:35
Ответы с готовыми решениями:

Реализовать базовый класс "Футбольная команда" и класс-наследник с методами консольного ввода/вывода
Составить программу на языке С++, в которой описывается класс (с добавлением наследуемого...

Абстрактный класс CGraphicsObject, его наследник - базовый класс CPoint, и класс - наследник от CPoint
Всем доброй ночи! Очень нужна помощь и по мере возможности разъяснения на темы: абстрактный класс в...

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

Базовый класс - текстовый файл и наследник...
А)Базовый класс Б)Класс наследник А) Текстовый файл, поддерживающий все стандартные файловые...

Наследование: базовый класс - массив, наследник - матрица
Помогите пожалуйста с наследованием. базовый класс - массив, наследник - матрица. Использовать...

4
sourcerer
Модератор
Эксперт CЭксперт С++
4874 / 2060 / 325
Регистрация: 20.02.2013
Сообщений: 5,558
Записей в блоге: 24
Завершенные тесты: 1
13.05.2018, 13:04 2
Цитата Сообщение от Sasha0001 Посмотреть сообщение
C++
1
ser_bal=k/disciplina;
Sasha0001, делите целое на целое и надеетесь получить число с плавающей точкой? Для получения ожидаемого результата необходимо явное приведение типа.
C++
1
2
3
4
5
// Либо так:
ser_bal = (float)k / disciplina; // приведение типа в стиле C
 
// Либо так:
ser_bal = static_cast<float>(k) / disciplina; // приведение типа в стиле C++
Выбор имён переменных тоже оставляет желать лучшего.
Вместо mark лучше grade.
Вместо ser_bal лучше average_grade.
Вместо disciplina лучше course.
Вместо PIB лучше full_name.
Вместо People лучше Person.
Вместо input_data() лучше set_personal_data().
Вместо input_disciplina() лучше set_course_info().
1
sourcerer
Модератор
Эксперт CЭксперт С++
4874 / 2060 / 325
Регистрация: 20.02.2013
Сообщений: 5,558
Записей в блоге: 24
Завершенные тесты: 1
13.05.2018, 15:00 3
Sasha0001, я бы сделал как-то так:
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
/*
Создать базовый класс Человек.
Каждый объект этого класса должен содержать:
    ФИО
    год рождения
    пол
Необходимые функции:
    ввод-вывод информации.
 
Создать класс-наследник Студент, который имеет дополнительные данные:
    год вступления в вуз
    номер зачетки
    кол-во дисциплин
    сами дисциплины(динамический массив)
    средний балл
Необходимые функции:
    ввод информации
    добавление дисциплин
    рассчет среднего балла
    вывод информации введенной в классе Человек+вся информация из класса Студент
*/
#include <iostream>
#include <string>
 
using std::string;
using std::cout;
using std::cin;
 
struct Course
{
    string name;
    size_t grade;
};
 
class Person
{
private:
    string full_name;
    size_t birth_year;
    string gender;
 
public:
    Person
        (
            const string & full_name_,
            const size_t birth_year_,
            const string & gender_
        ) :
            full_name(full_name_),
            birth_year(birth_year_),
            gender(gender_)
    {}
 
    void set_personal_data()
    {
        cout << "\nEnter full name: ";
        getline(cin, full_name);
 
        cout << "Enter birth year: ";
        cin >> birth_year;
 
        while (cin.get() != '\n') {} //get rid of bad input
 
        cout << "Enter gender: ";
        cin >> gender;
    }
 
    void show() const
    {
        cout
            << "\nFull name: " << full_name
            << "\nYear: " << birth_year
            << "\nGender: " << gender << "\n";
    }
};
 
 
class Student: public Person
{
private:
    size_t admission_year;
    size_t record_book_number;
    size_t number_of_courses;
    Course * courses;
    double calc_average_grade() const
    {
        double sum_of_all_grades = 0.0;
        for(size_t i = 0; i < number_of_courses; ++i)
            sum_of_all_grades += courses[i].grade;
 
        return sum_of_all_grades / number_of_courses;
    }
 
    void set_course_info()
    {
        for(size_t i = 0; i < number_of_courses; ++i)
        {
            cout << "Enter course name: ";
            cin >> courses[i].name;
            cout << "Enter course grade: ";
            cin >> courses[i].grade;
        }
    }
 
    void set_number_of_courses()
    {
        cout << "Enter number of courses: ";
        cin >> number_of_courses;
    }
 
    void set_record_book_number()
    {
        cout << "Enter record book number: ";
        cin >> record_book_number;
    }
 
    void set_admission_year()
    {
        cout << "Enter admission year: ";
        cin >> admission_year;
    }
 
public:
    Student
        (
            const string & full_name_ = "Philip K. Dick",
            const size_t birth_year_ = 1928,
            const string & gender_ = "male",
            const size_t admission_year_ = 1949,
            const size_t record_book_number_ = 1,
            const size_t number_of_courses_ = 1
        ) :
            Person
            (
                full_name_,
                birth_year_,
                gender_
            ),
            admission_year(admission_year_),
            record_book_number(record_book_number_),
            number_of_courses(number_of_courses_)
    {
        courses = new Course[number_of_courses];
    }
 
    ~Student()
    {
        delete[] courses;
    }
 
    void set_personal_data()
    {
        Person::set_personal_data();
        set_admission_year();
        set_record_book_number();
        set_number_of_courses();
 
        delete[] courses;
        courses = new Course[number_of_courses];
 
        set_course_info();
    }
 
    void add_course(const string & course_name_, size_t course_grade_)
    {
        Course * temp = new Course[number_of_courses];
        size_t old_number_of_courses = number_of_courses++;
 
        for (size_t i = 0; i < old_number_of_courses; ++i)
            temp[i] = courses[i];
 
        delete[] courses;
        courses = new Course[number_of_courses];
 
        for (size_t i = 0; i < old_number_of_courses; ++i)
            courses[i] = temp[i];
        delete[] temp;
 
        size_t new_course_index = number_of_courses - 1;
        courses[new_course_index].name = course_name_;
        courses[new_course_index].grade = course_grade_;
    }
 
    void show() const
    {
        Person::show();
 
        cout
            << "Admission year: " << admission_year
            << "\nRecord book number: " << record_book_number
            << "\nNumber of courses: " << number_of_courses
            << "\nAverage grade: " << calc_average_grade()
            << "\n\nCourses:\n";
 
        for(size_t i = 0; i < number_of_courses; ++i)
        {
            cout << "Course name: "<< courses[i].name;
            cout << "\nGrade:" << courses[i].grade << "\n";
        }
    }
};
 
 
int main()
{
    Person person("Philip K. Dick", 1928, "male");
    person.show();
 
    Student student;
    student.set_personal_data();
    student.add_course("Biology", 5);
    student.show();
}
1
Миниатюры
Реализовать базовый класс Человек и класс-наследник Студент  
sourcerer
Модератор
Эксперт CЭксперт С++
4874 / 2060 / 325
Регистрация: 20.02.2013
Сообщений: 5,558
Записей в блоге: 24
Завершенные тесты: 1
14.05.2018, 22:17 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
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
/*
Создать базовый класс Человек.
Каждый объект этого класса должен содержать:
    ФИО
    год рождения
    пол
Необходимые функции:
    ввод-вывод информации.
 
Создать класс-наследник Студент, который имеет дополнительные данные:
    год вступления в вуз
    номер зачетки
    кол-во дисциплин
    сами дисциплины(динамический массив)
    средний балл
Необходимые функции:
    ввод информации
    добавление дисциплин
    рассчет среднего балла
    вывод информации введенной в классе Человек+вся информация из класса Студент
*/
#include <iostream>
#include <string>
 
using std::string;
using std::cout;
using std::cin;
 
struct Course
{
    string name;
    size_t grade;
 
    Course() :
        name("unknown course name"),
        grade(0)
    {}
 
    Course(const string & name_, const size_t grade_) :
        name(name_),
        grade(grade_)
    {}
};
 
class Person
{
private:
    string full_name;
    size_t birth_year;
    string gender;
 
public:
    Person() :
        full_name("unknown person"),
        birth_year(0),
        gender("unknown gender")
    {}
 
    Person
        (
            const string & full_name_,
            const size_t birth_year_,
            const string & gender_
        ) :
            full_name(full_name_),
            birth_year(birth_year_),
            gender(gender_)
    {}
 
    void set_personal_data()
    {
        cout << "\nEnter full name: ";
        getline(cin, full_name);
 
        cout << "Enter birth year: ";
        cin >> birth_year;
 
        while (cin.get() != '\n') {} //get rid of bad input
 
        cout << "Enter gender: ";
        cin >> gender;
    }
 
    void show() const
    {
        cout
            << "\nFull name: " << full_name
            << "\nYear: " << birth_year
            << "\nGender: " << gender << "\n";
    }
};
 
 
class Student : public Person
{
private:
    size_t admission_year;
    size_t record_book_number;
    size_t number_of_courses;
    Course * courses;
 
    void set_course_info()
    {
        for(size_t i = 0; i < number_of_courses; ++i)
        {
            cout << "Enter course name: ";
            cin >> courses[i].name;
            cout << "Enter course grade: ";
            cin >> courses[i].grade;
        }
    }
 
    void set_number_of_courses()
    {
        cout << "Enter number of courses: ";
        cin >> number_of_courses;
    }
 
    void set_record_book_number()
    {
        cout << "Enter record book number: ";
        cin >> record_book_number;
    }
 
    void set_admission_year()
    {
        cout << "Enter admission year: ";
        cin >> admission_year;
    }
 
    double calc_average_grade() const
    {
        double sum_of_all_grades = 0.0;
        for(size_t i = 0; i < number_of_courses; ++i)
            sum_of_all_grades += courses[i].grade;
 
        return sum_of_all_grades / number_of_courses;
    }
 
public:
    Student
        (
            const string & full_name_ = "unknown student",
            const size_t birth_year_ = 0,
            const string & gender_ = "unknown gender",
            const size_t admission_year_ = 0,
            const size_t record_book_number_ = 0,
            const size_t number_of_courses_ = 1
        ) :
            Person
            (
                full_name_,
                birth_year_,
                gender_
            ),
            admission_year(admission_year_),
            record_book_number(record_book_number_),
            number_of_courses(number_of_courses_)
    {
        courses = new Course[number_of_courses];
    }
 
    ~Student()
    {
        delete[] courses;
    }
 
    void set_personal_data()
    {
        Person::set_personal_data();
        set_admission_year();
        set_record_book_number();
        set_number_of_courses();
 
        delete[] courses;
        courses = new Course[number_of_courses];
 
        set_course_info();
    }
 
    void add_course(const Course & newCourse)
    {
        Course * temp = new Course[number_of_courses];
        size_t old_number_of_courses = number_of_courses++;
 
        for (size_t i = 0; i < old_number_of_courses; ++i)
            temp[i] = courses[i];
 
        delete[] courses;
        courses = new Course[number_of_courses];
 
        for (size_t i = 0; i < old_number_of_courses; ++i)
            courses[i] = temp[i];
        delete[] temp;
 
        courses[number_of_courses - 1] = newCourse;
    }
 
    void show() const
    {
        Person::show();
 
        cout
            << "Admission year: " << admission_year
            << "\nRecord book number: " << record_book_number
            << "\nNumber of courses: " << number_of_courses
            << "\nAverage grade: " << calc_average_grade()
            << "\n\nCourses:\n";
 
        for(size_t i = 0; i < number_of_courses; ++i)
        {
            cout << "Course name: "<< courses[i].name;
            cout << "\nGrade:" << courses[i].grade << "\n";
        }
    }
};
 
 
int main()
{
    Person person("Philip K. Dick", 1928, "male");
    person.show();
 
    Student student;
    student.set_personal_data();
    student.add_course(Course("Biology", 5));
    student.show();
}
1
Sasha0001
1 / 1 / 0
Регистрация: 30.09.2017
Сообщений: 30
15.05.2018, 17:58  [ТС] 5
Цитата Сообщение от gru74ik Посмотреть сообщение
Sasha0001, я бы сделал как-то так:
Спасибо большое, поисправляла немного код по примеру, потому что часть того что вы написали мы пока в универе не разбирали. Но хоть посмотрела и поняла где накосячила с наследованием. Насчет имен переменных тоже взяла на заметку.
1
15.05.2018, 17:58
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.05.2018, 17:58

Реализовать класс родительский класс "Пара чисел" и класс-наследник "Комплексное число"
Ткма работы создать класс pair (пара чисел); определить метод перемножения полей и операцию...

Создать базовый класс "Массив" и класс-наследник "Матрица"
Добрый день! такой вопрос, как задать двумерный массив и заполнить его рандомными числами. и как...

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


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

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

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