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

Наследование - C++

Восстановить пароль Регистрация
 
LordSilren
0 / 0 / 0
Регистрация: 25.11.2011
Сообщений: 32
07.06.2013, 07:50     Наследование #1
Доброе утро всем.
Есть готовая рабочая программа
"Студент. Преподаватель. Человек"
нужно закоментить код, не могу разобраться в нем

Man.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
#ifndef MAN_H
#define MAN_H
 
#include<iostream>
#include <string.h>
using namespace std;
 
class Man
{
public:
    Man();
    Man(int _age, int _gender);
    Man(int _age, int _gender,char *_name); 
    Man(const Man &x);
    ~Man();
 
    friend istream& operator >> (istream& in, Man &x);
    friend ostream& operator << (ostream& out, Man &x);
 
    virtual void Show() = 0;
    virtual void Get();
 
public:
    char *name;
    int gender;
    int age;
};
 
#endif MAN_H


Man.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
#include "Man.h"
 
 
Man::Man() {name = new char[30];}
 
Man::Man(int _age, int _gender) // конструктор с параметрами
{
    age = _age;
    gender = _gender;
    name = new char[30];
}
 
Man::Man(int _age, int _gender,char *_name) // конструктор с параметрами
{
    age = _age;
    gender = _gender;
    name = new char[30];
    strcpy(name, _name);
}
 
Man::Man(const Man &x)// конструктор копирования
{
    age = x.age;
    gender = x.gender;
    name = new char[30];
    strcpy(name, x.name);
}
 
 
Man::~Man()
{
    delete name;
}
 
 
void Man:: Show()
{
    cout << "/////////////////////////\n" << endl;
    cout << "Возраст: " << age << endl;
    if(gender == 1) cout << "Пол: мужской" << endl;
    if(gender == 2) cout << "Пол: женский" << endl;
    cout << "Имя: " << name << endl;
    cout << "\n/////////////////////////" << endl;
}
 
void Man::Get()
{
    cout << "Введите возраст" << endl;
    cin >> age;
    
    while(true)
    {
        cout << "Выберите пол:\n" << endl;
        cout << "1: мужской" << endl << "2: женский" << endl;
        cin >> gender;
        if((gender != 1) && (gender != 2)) cout << "неверный ввод!" << endl;
        else break;
    }
 
    cout << "Введите имя" << endl;
    cin >> name;
}
 
istream& operator >> (istream& in, Man &x)
{
    cout << "Введите возраст" << endl;
    in >> x.age;
    
    while(true)
    {
        cout << "Выберите пол:\n" << endl;
        cout << "1: мужской" << endl << "2: женский" << endl;
        in >> x.gender;
        if((x.gender != 1) && (x.gender != 2)) cout << "неверный ввод!" << endl;
        else break;
    }
 
    cout << "Введите имя" << endl;
    in >> x.name;
    return in;
}


Student.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
#pragma once
#ifndef STUDENT_H
#define STUDENT_H
#include "man.h"
class Student :
    public Man
{
public:
    Student();
    Student(int _form, int _lvl);
    Student(int _form, int _lvl, char *_prof);
    ~Student(void);
 
    Student New_Prof();
    int End();
    void Get();
    void Show();
 
    friend istream& operator >> (istream &in, Student &x);
public: 
    int form;
    int lvl;
    char *prof;
};
 
#endif STODENT_H


Student.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
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
#include "Student.h"
 
Student::Student()
{
    prof = new char[20];
}
Student::Student(int _form, int _lvl)
{
    form = _form;
    lvl = _lvl;
    prof = new char[20];
}
 
Student::Student(int _form, int _lvl, char *_prof) 
{
    form = _form;
    lvl = _lvl;
    prof = new char[20];
    strcpy(prof, _prof);
}
 
Student Student::New_Prof ()
{
    delete [] prof;
    prof = new char [20];
    cin >> prof;
    return *this;
}
 
int Student:: End()
{
    int e;
    e = 4 - lvl;
    return e;
}
 
void Student:: Get()
{
    cout << "Введите возраст" << endl;
    cin >> age;
    
    while(true)
    {
        cout << "Выберите пол:\n" << endl;
        cout << "1: мужской" << endl << "2: женский" << endl;
        cin >> gender;
        if((gender != 1) && (gender != 2)) cout << "неверный ввод!" << endl;
        else break;
    }
 
    cout << "Введите имя" << endl;
    cin >> name;
 
    cout << "Введите специальность:" << endl;
    cin >> prof;
 
    while(true)
    {
        cout << "Выберите форму обучения:\n" << endl;
        cout << "1: очная" << endl << "2: заочная" << endl << "3: экстернат" << endl << "4: очно - заочная" << endl;
        cin >> form;
        if((form != 1) && (form != 2) && (form != 3) && (form != 4)) cout << "Неверный ввод!" << endl;
        else break;
    }
 
    cout << "Введите курс:" << endl;
    cin >> lvl;
}
 
istream& operator >> (istream &in, Student &x)
{
    cout << "Введите возраст" << endl;
    in >> x.age;
    
    while(true)
    {
        cout << "Выберите пол:\n" << endl;
        cout << "1: мужской" << endl << "2: женский" << endl;
        in >> x.gender;
        if((x.gender != 1) && (x.gender != 2)) cout << "неверный ввод!" << endl;
        else break;
    }
 
    cout << "Введите имя" << endl;
    in >> x.name;
 
    cout << "Введите специальность:" << endl;
    in >> x.prof;
 
    while(true)
    {
        cout << "Выберите форму обучения:\n" << endl;
        cout << "1: очная" << endl << "2: заочная" << endl << "3: экстернат" << endl << "4: очно - заочная" << endl;
        in >> x.form;
        if((x.form != 1) && (x.form != 2) && (x.form != 3) && (x.form != 4)) cout << "Неверный ввод!" << endl;
        else break;
    }
 
    cout << "Введите курс:" << endl;
    in >> x.lvl;
 
    
 
    return in;
}
 
void Student:: Show()
{
    cout << "/////////////////////////\n" << endl;
 
    cout << "Возраст: " << age << endl;
    if(gender == 1) cout << "Пол: мужской" << endl;
    if(gender == 2) cout << "Пол: женский" << endl;
    cout << "Имя: " << name << endl;
 
    cout << "Специальность: " << prof << endl;
    
    switch(form)
    {
        case 1:
            cout << "Очная форма обучения" << endl;
            break;
        
        case 2:
            cout << "Заочная форма обучения" << endl;
            break;
 
        case 3:
            cout << "Экстернат" << endl;
            break;
 
        case 4:
            cout << "Очно - заочная форма обучения" << endl;
            break;
    }
 
    cout << "Курс: " << lvl << endl;
 
    cout << "\n/////////////////////////" << endl;
}
 
Student::~Student(void)
{
}


Teacher.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
#pragma once
#ifndef TEACHER_H
#define TEACHER_H
#include "man.h"
 
class Teacher : public Man
{
public:
    Teacher(void);
    Teacher(float _pay);
    Teacher(float _pay, char *_post);
    ~Teacher(void);
 
    friend istream& operator >> (istream& in, Teacher &x);
 
    void Show();
    void Get();
 
    void New_Post();
    void New_Pay();
 
public:
    char *post;
    float pay;
};
 
#endif TEACHER_H


Teacher.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
94
#include "Teacher.h"
 
Teacher::Teacher()
{
    post = new char[20];
}
 
Teacher::Teacher(float _pay)
{
    pay = _pay;
    post = new char[20];
}
 
Teacher::Teacher(float _pay, char *_post)
{
    pay = _pay;
    post = new char[20];
    strcpy(post, _post);
}
 
void Teacher:: Show()
{
    cout << "/////////////////////////\n" << endl;
 
    cout << "Возраст: " << age << endl;
    //out << "Пол: " << x.gender << endl;
    if(gender == 1) cout << "Пол: мужской" << endl;
    if(gender == 2) cout << "Пол: женский" << endl;
    cout << "Имя: " << name << endl;
    cout << "Должность: " << post << endl;
    cout << "Зар. плата: " << pay << endl;
 
    cout << "\n/////////////////////////" << endl;
}
 
void Teacher::New_Post()
{
    delete [] post;
    post = new char[20];
    cin >> post;
}
 
void Teacher:: New_Pay()
{
    cin >> pay;
}
 
Teacher::~Teacher(void)
{
    delete [] post;
}
 
void Teacher::Get()
{
    cout << "Введите возраст" << endl;
    cin >> age;
    while(true)
    {
        cout << "Выберите пол:\n" << endl;
        cout << "1: мужской" << endl << "2: женский" << endl;
        cin >> gender;
        if((gender != 1) && (gender != 2)) cout << "НЕВЕРНЫЙ ВВОД!" << endl;
        else break;
    }
 
    cout << "Введите имя" << endl;
    cin >> name;
    cout << "Укажите должность преподавателя: " << endl;
    cin >> post;
    cout << "Зарплата" << endl;
    cin >> pay;
}
 
istream& operator >> (istream& in, Teacher &x)
{
    cout << "Введите возраст" << endl;
    in >> x.age;
    while(true)
    {
        cout << "Выберите пол:\n" << endl;
        cout << "1: мужской" << endl << "2: женский" << endl;
        in >> x.gender;
        if((x.gender != 1) && (x.gender != 2)) cout << "НЕВЕРНЫЙ ВВОД!" << endl;
        else break;
    }
 
    cout << "Введите имя" << endl;
    in >> x.name;
    cout << "Укажите должность преподавателя: " << endl;
    in >> x.post;
    cout << "Зарплата" << endl;
    in >> x.pay;
    return in;
}


Main.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 <locale.h>
#include "Teacher.h"
#include "Man.h"
#include "Student.h"
int main()
{
    setlocale(LC_ALL, "Russian");
 
    Man *pmas[2]; int x, t, s;
    Teacher T; Student S;
    /*T.Get(); 
    T.Show();
    T.Show();
    /*pmas[0] = new Teacher(); 
    pmas[1] = new Student();
    pmas[0] ->Get();
    pmas[0] -> Show();
    pmas[1] ->Get();
    pmas[1] -> Show();*/
 
    while(1)
    {
        cout << "1: Преподаватель\n" << "2: Студент\n" << "3: Выход\n"; 
        cin >> x;
        switch(x)
        {
            case 1:
                T.Get();
                T.Show();
                while(1)
                {
                    cout << "1: Сменить должность\n" << "2: Сменить зарплату\n" << "3: Выход\n";
                    cin >> t;
                    switch(t)
                    {
                    case 1:
                        cout <<"Введите новую должность";
                        T.New_Post();
                        T.Show();
                        break;
                    case 2:
                        cout <<"Введите новую зарплату";
                        T.New_Pay();
                        T.Show();
                        break;
                    case 3:
                        break;
                    default:
                        cout << "неверный ввод\n";
                    }
                    if(t == 3) break;
                }
                break;
            
            case 2:
                S.Get();
                S.Show();
                while(1)
                {
                    cout << "1: Сменить специальность\n" << "2: Сколько еще учиться\n" << "3: Выход\n";
                    cin >> s;
                    switch(s)
                    {
                    case 1:
                        cout <<"Введите новую специальность\n";
                        S.New_Prof();
                        S.Show();
                        break;
                    case 2: 
                        int z;
                        z = S.End();
                        cout << "Осталось единиц времени: " << z << endl;
                        break;
                    case 3:
                        break;
                        //exit(0);
                    default:
                        cout << "неверный ввод\n";
                    }
                    if(s == 3) break;
                }
                break;
 
            case 3:
                exit(0);
            
            default:
                cout<<"Неверный ввод\n"; 
            break;
        }
    }
    return 0;
}


буду очень признателен за помощь
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.06.2013, 07:50     Наследование
Посмотрите здесь:

Наследование C++
Наследование C++
C++ наследование
C++ Наследование
Наследование C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11836 / 6815 / 770
Регистрация: 27.09.2012
Сообщений: 16,898
Записей в блоге: 2
Завершенные тесты: 1
07.06.2013, 08:08     Наследование #2
C++
1
2
3
/*
Тут код
*/
LordSilren
0 / 0 / 0
Регистрация: 25.11.2011
Сообщений: 32
07.06.2013, 08:40  [ТС]     Наследование #3
не смешно( через 2 часа сдавать, а я ничего не знаю(

Добавлено через 25 минут
ребят, выручайте...
Pro_ha
1 / 1 / 0
Регистрация: 07.06.2013
Сообщений: 32
07.06.2013, 09:18     Наследование #4
Никто и не смеется, тебе уже дали правильный ответ на _твой_вопрос_
LordSilren
0 / 0 / 0
Регистрация: 25.11.2011
Сообщений: 32
07.06.2013, 09:18  [ТС]     Наследование #5
почти во всем разобрался, только не могу понять..
для чего это?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
istream& operator >> (istream& in, Teacher &x)
{
    cout << "Введите возраст" << endl;
    in >> x.age;
    while(true)
    {
        cout << "Выберите пол:\n" << endl;
        cout << "1: мужской" << endl << "2: женский" << endl;
        in >> x.gender;
        if((x.gender != 1) && (x.gender != 2)) cout << "НЕВЕРНЫЙ ВВОД!" << endl;
        else break;
    }
 
    cout << "Введите имя" << endl;
    in >> x.name;
    cout << "Укажите должность преподавателя: " << endl;
    in >> x.post;
    cout << "Зарплата" << endl;
    in >> x.pay;
    return in;
}
и еще нужно разобраться с Man.h , Student.h , Teacher.h...помогите пожалуйста
DarkSkazochnik
 Аватар для DarkSkazochnik
3 / 3 / 0
Регистрация: 17.11.2012
Сообщений: 39
07.06.2013, 09:29     Наследование #6
LordSilren, это перегрузка оператора получения данных из потока (поправьте, если неправ).

Перегружаешь для того, чтобы из потока данные считывались именно в объекты класса Teacher
Yandex
Объявления
07.06.2013, 09:29     Наследование
Ответ Создать тему
Опции темы

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