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

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

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

Наследование классов. Используя базовый класс Point {x, y, цвет} разработать производные классы механизма двигателя. C++
C++ Создать класс - данные - абстрактный базовый класс. Создать производные классы
Создать абстрактный базовый класс с виртуальной функцией - Объем. Создать производные классы: Пирамида, Шар со своими функциями объема C++
C++ Используя производные классы, определить класс параметризованного списка одного из следующих типов. Применить его для построения списка объектов указа
Создайте исходный базовый класс building, производные классы house и office C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
shmat_ru
1 / 1 / 0
Регистрация: 23.12.2012
Сообщений: 161
15.04.2013, 15:29  [ТС]     Определить базовый класс и на его основе производные классы #2
Помогите пожалуйста.
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;
}
TSed
19 / 19 / 1
Регистрация: 22.01.2013
Сообщений: 76
02.11.2013, 15:10     Определить базовый класс и на его основе производные классы #4
В main(), перед return 0; следует добавить
C++
1
delete [] coll;
Tulosba
:)
Эксперт C++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
02.11.2013, 16:16     Определить базовый класс и на его основе производные классы #5
TSed, динамического выделения массива не было. Поэтому и удалять надо не массив, а только те элементы, для которых было выделение через new. В данном случае:
C++
1
2
3
delete coll[0];
delete coll[1];
delete coll[2];
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];
Вы правы, спасибо за исправление.
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
02.11.2013, 20:04     Определить базовый класс и на его основе производные классы #7
Цитата Сообщение от TSed Посмотреть сообщение
using namespace std;
В заголовочных файлах лучше так не делать.
Цитата Сообщение от TSed Посмотреть сообщение
#include <iostream>
У вас этот заголовок нигде не используется, поэтому его лучше убрать. Вообще, рекомендую посмотреть эту ссылку
http://herbsutter.com/2013/08/19/got...encies-part-1/
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.11.2013, 23:51     Определить базовый класс и на его основе производные классы
Еще ссылки по теме:

C++ Создать абстрактный базовый класс Figure с виртуальной функцией Периметр. Создать производные классы Rectangle
C++ Базовый класс "Летательный аппарат" и производные классы Ракета и Самолет
C++ Создать базовый класс «Музыкальный инструмент» и производные классы «Ударный», «Струнный», «Духовой»

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

Или воспользуйтесь поиском по форуму:
TSed
19 / 19 / 1
Регистрация: 22.01.2013
Сообщений: 76
02.11.2013, 23:51     Определить базовый класс и на его основе производные классы #8
Цитата Сообщение от rangerx Посмотреть сообщение
В заголовочных файлах лучше так не делать.
Спасибо за совет.
Это связано с возможным переопределением функций/имен с одинаковыми именами ?
Yandex
Объявления
02.11.2013, 23:51     Определить базовый класс и на его основе производные классы
Ответ Создать тему
Опции темы

Текущее время: 01:56. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru