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

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

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

Определить базовый класс и на его основе производные классы - C++

12.03.2013, 09:16. Просмотров 1004. Ответов 7
Метки нет (Все метки)

Разработать консольную программу на языке С++, в которой необходимо определить базовый класс и на его основе производные классы. Кроме закрытых полей с данными в классах должны быть методы доступа, конструкторы с параметрами, деструктор, также методы и функции-друзья в соответствии с индивидуальным вариантом задачи. С использование массива указателей на базовый класс создать массив объектов производных классов и организовать работу с ним. В программе необходимо продемонстрировать механизм динамического полиморфизма.
Базовый класс «СТУДЕНТ» описывает следующие данные о студентах университета: ФИО, год поступления, курс, номер группы, размер стипендии, оценки по n предметам. В состав класса входят следующие функции: виртуальный метод просмотра информации о студенте, функция-друг, которая вычисляет средний балл и выводит ФИО студента, у которого он максимальный. Производный класс «СТУДЕНТ-ОБЩЕСТВЕННИК» содержит следующие элементы: общественная работа, процент надбавки к стипендии, переопределенный метод просмотра информации о студентах-общественниках. Производный класс «СТУДЕНТ-СПОРТСМЕН» содержит следующие элементы: вид спорта, переопределенный метод просмотра информации о студентах-спортсменах.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.03.2013, 09:16
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Определить базовый класс и на его основе производные классы (C++):

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

Создайте исходный базовый класс building, производные классы house и office - C++
Здравствуйте, помогите пожалуйста с решением задачи. Создайте исходный базовый класс building для хранения числа этажей и комнат в...

Создать абстрактный базовый класс Figure и производные классы Rectangle, Circle - C++
Создать абстрактный базовый класс Figure с виртуальными методами вычисления площади и периметра. Создать производные классы: Rectangle...

Создать базовый класс «Музыкальный инструмент» и производные классы «Ударный», «Струнный», «Духовой» - C++
Создать базовый класс «Музыкальный инструмент» и производные классы «Ударный», «Струнный», «Духовой». Создать массив объектов «Оркестр»....

Создать базовый класс «Домашнее животное» и производные классы «Собака», «Кошка», «Попугай» - C++
9. Создать базовый класс «Домашнее животное» и производные классы «Собака», «Кошка», «Попугай» и др. С помощью конструкто-ра установить имя...

Создать базовый класс «Транспортное средство» и производные классы «Автомобиль», «Велосипед», «Повозка» - C++
При выполнении данной работы необходимо определить базовый класс и производные от него классы. Предусмотреть передачу аргу- ментов...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
shmat_ru
1 / 1 / 0
Регистрация: 23.12.2012
Сообщений: 161
15.04.2013, 15:29  [ТС] #2
Помогите пожалуйста.
0
TSed
19 / 19 / 1
Регистрация: 22.01.2013
Сообщений: 76
30.10.2013, 00:13 #3
students.h
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
#ifndef _STUDENT_H_
#define _STUDENT_H_
 
#include <string>
#include <vector>
#include <iostream>
 
using namespace std;
 
class student{
protected:
    string m_name;
    int m_year_of_admission;
    short m_course;
    short m_group_number;
    short m_pay;
    vector <float> marks;//collection of marks
    float aver_mark;//average mark 
public:
    student (string name, int year_of_admission, short course, short group_number, short pay);
    virtual ~student();
    virtual void show();
    friend void GPA(student *st[]);// average mark
};
 
class social : public student{
    string m_social_work;
    float m_percent;
public:
    social(string name, int year_of_admission, short course, short group_number, short pay,
        string social_work, float percent);
    ~social();
    virtual void show();
};
 
class sport : public student{
    string m_kind_of_sport;
public:
    sport(string name, int year_of_admission, short course, short group_number, short pay, string kind_of_sport);
    ~sport();
    virtual void show();
};
 
#endif//end of _STUDENT_H_
students.cpp
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
#include "student.h"
 
extern int students = 3;
 
student::student(string name, int year_of_admission, short course, short group_number, short pay):
    m_name(name), m_year_of_admission(year_of_admission), m_course(course), m_group_number(group_number), m_pay(pay){
    cout<<"Would you like to add marks for "<<m_name<<"? (1 for Yes, 0 for No)"<<endl;
    bool answer = false;
    cin>>answer;
    if (answer == true){
        do{
            answer = false;
            float mark;
            cout<<"Enter mark"<<endl;
            cin>>mark;
            marks.push_back(mark);
            cout<<"Add a new ? (1 for Yes, 0 for No)"<<endl;
            cin>>answer;
        }
        while (answer == true);
    }//if end
    aver_mark = 0;
}
 
student::~student(){
}
 
void student::show(){
    cout<<"Student name: "<<m_name<<endl
        <<"year of admission: "<<m_year_of_admission<<endl
        <<"course: "<<m_course<<endl
        <<"group number: "<<m_group_number<<endl
        <<"scollarship: "<<m_pay<<endl
        <<"AV MARK: "<<aver_mark<<endl;
}
 
social::social(string name, int year_of_admission, short course, short group_number, short pay, 
               string social_work, float percent) : 
               student(name, year_of_admission, course, group_number, pay){
    m_social_work = social_work;
    m_percent = percent;
}
 
social::~social(){
}
 
void social::show(){
        student::show();
        cout<<"social work: "<<m_social_work<<endl
        <<"%: "<<m_percent<<endl;
}
 
sport::sport(string name, int year_of_admission, short course, short group_number, short pay, string kind_of_sport):
        student(name, year_of_admission, course, group_number, pay){
    m_kind_of_sport = kind_of_sport;
}
 
sport::~sport(){
}
 
void sport::show(){
    student::show();
    cout<<"sport: "<<m_kind_of_sport<<endl;
}
 
void GPA (student *st[]){//count averege mark of all stud, and out name of stud which have max mark 
    float sum = 0;
 
    if (students == 0){
        cerr<<"Error: no students"<<endl;
        return;
    }
 
    for(int i = 0; i < students; i++){
        if (st[i]->marks.size() > 0){
            for(int j = 0; j < st[i]->marks.size(); j++){ 
                sum += st[i]->marks[j];
            }
            st[i]->aver_mark = sum / st[i]->marks.size();
            sum = 0;//set sum to zero
        }//if end
    }//end of stud block
 
    float max = st[0]->aver_mark;
    for (int i = 1; i < students; i++){
        if (st[i]->aver_mark > st[i-1]->aver_mark) 
            max = st[i]->aver_mark;
    }
    cout<<"MAX mark !!!!!!!!"<<max<<endl;
    for (int i = 0; i<students; i++)
        if(st[i]->aver_mark == max)
            cout<<st[i]->m_name<<" have the most high averge mark "<<st[i]->aver_mark<<endl;
}
main.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include "student.h"
 
const int students = 3;//number of students
 
int main(){
    student *coll[students];
    coll[0] = new student("standart student", 2010, 3, 306, 500);
    coll[1] = new social("social student", 2011, 2, 202, 600, "shop steward", 10.0);
    coll[2] = new sport("sport student", 2009, 4, 401, 650, "boxing");
    for(int i = 0; i<students; i++)
        coll[i]->show();
    GPA(coll);
    system("pause");
    return 0;
}
1
TSed
19 / 19 / 1
Регистрация: 22.01.2013
Сообщений: 76
02.11.2013, 15:10 #4
В main(), перед return 0; следует добавить
C++
1
delete [] coll;
0
Tulosba
:)
Эксперт С++
4396 / 3239 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
02.11.2013, 16:16 #5
TSed, динамического выделения массива не было. Поэтому и удалять надо не массив, а только те элементы, для которых было выделение через new. В данном случае:
C++
1
2
3
delete coll[0];
delete coll[1];
delete coll[2];
1
TSed
19 / 19 / 1
Регистрация: 22.01.2013
Сообщений: 76
02.11.2013, 16:48 #6
Цитата Сообщение от Tulosba Посмотреть сообщение
TSed, динамического выделения массива не было. Поэтому и удалять надо не массив, а только те элементы, для которых было выделение через new. В данном случае:
C++
1
2
3
delete coll[0];
delete coll[1];
delete coll[2];
Вы правы, спасибо за исправление.
0
rangerx
1933 / 1542 / 141
Регистрация: 31.05.2009
Сообщений: 2,912
02.11.2013, 20:04 #7
Цитата Сообщение от TSed Посмотреть сообщение
using namespace std;
В заголовочных файлах лучше так не делать.
Цитата Сообщение от TSed Посмотреть сообщение
#include <iostream>
У вас этот заголовок нигде не используется, поэтому его лучше убрать. Вообще, рекомендую посмотреть эту ссылку
http://herbsutter.com/2013/08/19/got...encies-part-1/
0
TSed
19 / 19 / 1
Регистрация: 22.01.2013
Сообщений: 76
02.11.2013, 23:51 #8
Цитата Сообщение от rangerx Посмотреть сообщение
В заголовочных файлах лучше так не делать.
Спасибо за совет.
Это связано с возможным переопределением функций/имен с одинаковыми именами ?
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.11.2013, 23:51
Привет! Вот еще темы с ответами:

Наследование классов. Используя базовый класс Point {x, y, цвет} разработать производные классы механизма двигателя. - C++
Движок (двигатель с кривошипно-шатунным механизмом) Ребята, кто может, помогите очень надо! получу автоматом или пойду на экзамен, вот...

Создать класс - данные - абстрактный базовый класс. Создать производные классы - C++
Всем привет! У меня вот такая проблема.... Создать класс - данные - абстрактный базовый класс. Создать производные классы - данные типа...

Базовый класс "Летательный аппарат" и производные классы Ракета и Самолет - C++
Определить абстрактный базовый класс &quot;Летательный аппарат&quot; содержащий данные, описывающие название, стартовую массу аппарата. В этом...

Создать абстрактный базовый класс Figure с виртуальной функцией Периметр. Создать производные классы Rectangle - C++
Создать абстрактный базовый класс Figure с виртуальной функцией -периметр.Создать производные классы Rectangle, Circle,Triangle,Rhomb в...


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

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

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