Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.52/63: Рейтинг темы: голосов - 63, средняя оценка - 4.52
30 / 24 / 6
Регистрация: 24.11.2020
Сообщений: 214

Построить иерархию классов, используя абстрактный класс

31.03.2021, 15:13. Показов 13358. Ответов 59

Студворк — интернет-сервис помощи студентам
Здравствуйте! Помогите разобраться с заданием, честно говоря, я вообще не понимаю, что и как делать...
Задание такое:
Постройте иерархию классов, используя абстрактный класс в
соответствии с вариантом задания. (Рабочий, кадры, инженер, администрация).
Должны быть заданы названия базовых и производных классов. Необходимо
разработать поля и методы, наследуемые из базового класса, и собственные
компоненты производных классов. При выполнении работы следует разработать
возможность выбирать соответствующий класс, просматривать его содержимое,
заносить, изменять и удалять данные этого класса.

Нашла вот такой код, пыталась хоть как-то вникнуть в тему классов... Пробовала сделать меню, для выбора хотя бы, но не знаю, как реализовать этот самый вывод:
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
#include <iostream>
#include <conio.h>
#include <string>
#include <Windows.h>
 
using namespace std;
 
class Publication {
protected:
    string name;
 
public:
    static Publication* begin;
    Publication* next;
 
    static void add(Publication* cur) {
        cur->next = begin;
        begin = cur;
    }
 
    Publication() {
        add(this);
    }
 
    virtual void show() {
        cout << "Name: " << name << endl;
        cout << "----------------------------" << endl;
    }
 
    virtual void set_parameters() {
        string s;
 
        cout << "Name: ";
        cin >> s;
 
        name = s;
    }
 
    virtual void print() {
        Publication* l = begin;
 
        while (l) {
            l->show();
            l = l->next;
        }
    }
};
 
Publication* Publication::begin;
 
class Book : public Publication {
protected:
    int pages;
    string author;
 
public:
    Book() :Publication() {}
 
    void show() {
        cout << "Name: " << name << endl;
        cout << "Pages: " << pages << endl;
        cout << "Author: " << author << endl;
        cout << "----------------------------" << endl;
    }
 
    void set_parameters() {
        int k;
        string s, a;
 
        cout << "Name: ";
        cin >> s;
 
        cout << "Author: ";
        cin >> a;
 
        cout << "Pages: ";
        cin >> k;
 
        name = s;
        author = s;
        pages = k;
    }
 
};
 
class Magazine : public Publication {
protected:
    int pages;
    int mon;
    int year;
 
public:
    Magazine() :Publication() {}
 
    void show() {
        cout << "Name: " << name << endl;
        cout << "Pages: " << pages << endl;
        cout << "Data: " << mon << "." << year << endl;
        cout << "----------------------------" << endl;
    }
 
    void set_parameters() {
        int n, m, y;
        string s;
 
        cout << "Name: ";
        cin >> s;
 
        cout << "Pages: ";
        cin >> n;
 
        cout << "Month: ";
        cin >> m;
 
        cout << "Year: ";
        cin >> y;
 
        name = s;
        pages = n;
        year = y;
        mon = m;
    }
};
 
class Textbook : public Publication {
public:
    Textbook() :Publication() {}
};
 
int main() 
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
    Publication::begin = 0;
    Publication publication;
    Book book;
    Magazine magazine;
    Textbook textbook;
 
    cout << "Publication" << endl;
    publication.set_parameters();
 
    cout << "Book" << endl;
    book.set_parameters();
 
    cout << "Magazine" << endl;
    magazine.set_parameters();
 
    cout << "Textbook" << endl;
    textbook.set_parameters();
 
    cout << "============================" << endl;
    cout << "All PUBLICATION" << endl;
    cout << "============================" << endl;
 
    publication.print();
 
    _getch();
    return 0;
}
Добавлено через 16 минут
Немного отредактировала, чтобы было удобнее
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
#include <iostream>
#include <conio.h>
#include <string>
#include <Windows.h>
 
using namespace std;
 
class Kadry {
protected:
    string name;
 
public:
    static Kadry* begin;
    Kadry* next;
 
    static void add(Kadry* cur) {
        cur->next = begin;
        begin = cur;
    }
 
    Kadry() {
        add(this);
    }
 
    virtual void show() {
        cout << "Имя: " << name << endl;
        cout << "----------------------------" << endl;
    }
 
    virtual void set_parameters() {
        string s;
 
        cout << "Имя: ";
        cin >> s;
 
        name = s;
    }
 
    virtual void print() {
        Kadry* l = begin;
 
        while (l) {
            l->show();
            l = l->next;
        }
    }
};
 
Kadry* Kadry::begin;
 
class Admin : public Kadry {
protected:
    int age;
    string familiya;
 
public:
    Admin() :Kadry() {}
 
    void show() {
        cout << "Имя: " << name << endl;
        cout << "Возраст: " << age << endl;
        cout << "Фамилия: " << familiya << endl;
        cout << "----------------------------" << endl;
    }
 
    void set_parameters() {
        int k;
        string s, a;
 
        cout << "Имя: ";
        cin >> s;
 
        cout << "Фамилия: ";
        cin >> a;
 
        cout << "Возраст: ";
        cin >> k;
 
        name = s;
        familiya = a;
        age = k;
    }
 
};
 
class Rabochii : public Kadry {
protected:
    int age;
    int mon;
    int year;
 
public:
    Rabochii() :Kadry() {}
 
    void show() {
        cout << "Имя: " << name << endl;
        cout << "Возраст: " << age << endl;
        cout << "Месяц и год рождения: " << mon << "." << year << endl;
        cout << "----------------------------" << endl;
    }
 
    void set_parameters() {
        int n, m, y;
        string s;
 
        cout << "Имя: ";
        cin >> s;
 
        cout << "Возраст: ";
        cin >> n;
 
        cout << "Месяц: ";
        cin >> m;
 
        cout << "Год: ";
        cin >> y;
 
        name = s;
        age = n;
        year = y;
        mon = m;
    }
};
 
class Injener : public Kadry {
public:
    Injener() :Kadry() {}
};
 
int main() 
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
    Kadry::begin = 0;
    Kadry Kadry;
    Admin Admin;
    Rabochii Rabochii;
    Injener Injener;
 
    cout << "Кадры: " << endl;
    Kadry.set_parameters();
 
    cout << "Администрация: " << endl;
    Admin.set_parameters();
 
    cout << "Рабочие: " << endl;
    Rabochii.set_parameters();
 
    cout << "Инженеры: " << endl;
    Injener.set_parameters();
 
    cout << "============================" << endl;
    cout << "Вывод Информации!" << endl;
    cout << "============================" << endl;
 
    Kadry.print();
 
    _getch();
    return 0;
}
Добавлено через 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
int menu();
 
while (1)
    {
        switch (menu())
        {
        case 1:
//////
            break;
        case 2:
//////
            break;
        case 3:
////////
            break;
        case 4:
      /////////
            break;
        case 5:
            exit(0);
            break;
        case 6:
            system("cls");
            break;
        default:
            cout << "Неверный выбор!\n";
        }
    }
 
int menu()
{
    int vvod;
    cout << "1 - ///;\n";
    cout << "2 - ///;\n";
    cout << "3 - ///;\n";
    cout << "4 - ///;\n";
    cout << "5 - выход;\n";
    cout << "6 - очистить экран;\n\n";
    cout << "Выберите действие: "; cin >> vvod;
    cout << "\n";
    return vvod;
}
Если да, то как?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
31.03.2021, 15:13
Ответы с готовыми решениями:

Создать иерархию классов: абстрактный базовый класс Array и производные классы AndArray и OnArray
Помогите написать программу, спасибо!!! Создать абстрактный базовый класс Array с виртуальными методами сложения и поэлементной...

Создать абстрактный базовый класс объектов на декартовой плоскости CShape и разработать иерархию классов конкретных фигур
Создать абстрактный базовый класс объектов на декартовой плоскости CShape (фигура). Спроектировать и реализовать иерархию классов...

Создать иерархию классов Шахматная фигура – абстрактный класс, содержащий поле – цвет. Создать производные классы
Создать иерархию классов Шахматная фигура – абстрактный класс, содержащий поле – цвет. Создать производные классы все фигуры, содержащие...

59
30 / 24 / 6
Регистрация: 24.11.2020
Сообщений: 214
02.04.2021, 11:40  [ТС]
Студворк — интернет-сервис помощи студентам
oleg-m1973, А само это наследование я правильно сделала, не подскажете? А то пол ночи сидела, пыталась понять, как это делается.
А сам вывод мне так делать?
C++
1
2
3
4
5
6
for (size_t i = 0; i < n2 && n < N; i++)
    {
        cout << "Вывод информации " << i + 1 << " инженера: " << endl;
employees[n]->engineer.Show();
        cout << endl;
    }
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
02.04.2021, 11:44
Лучший ответ Сообщение было отмечено ANGELin04ka как решение

Решение

Цитата Сообщение от ANGELin04ka Посмотреть сообщение
А сам вывод мне так делать?
Цитата Сообщение от ANGELin04ka Посмотреть сообщение
for (size_t i = 0; i < n; i++)
    {
        cout << "Вывод информации " << i + 1 << " инженера: " << endl;
employees[i]->engineer.Show();
        cout << endl;
    }
Цитата Сообщение от ANGELin04ka Посмотреть сообщение
oleg-m1973, А само это наследование я правильно сделала, не подскажете? А то пол ночи сидела, пыталась понять, как это делается.
Так себе, но сойдёт
C++
1
2
3
4
5
class Employee { //Абстрактный базовый класс кадры
...............
public:
      virtual ~Employee() = default;
.........................
1
30 / 24 / 6
Регистрация: 24.11.2020
Сообщений: 214
02.04.2021, 11:47  [ТС]
oleg-m1973, Он пишет, что нет в классе engineer.Show()
C++
1
2
3
4
5
6
for (size_t i = 0; i < n; i++)
    {
        cout << "Вывод информации " << i + 1 << " инженера: " << endl;
employees[i]->engineer.Show();
        cout << endl;
    }
Сделать так?
C++
1
2
3
4
5
6
    for (size_t i = 0; i < n; i++)
    {
        cout << "Вывод информации " << i + 1 << " инженера: " << endl;
        employees[i]->Show();
        cout << endl;
    }
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
02.04.2021, 11:49
Цитата Сообщение от ANGELin04ka Посмотреть сообщение
Сделать так?
Именно
1
30 / 24 / 6
Регистрация: 24.11.2020
Сообщений: 214
02.04.2021, 11:54  [ТС]
oleg-m1973, Отлично, работает, спасибо вам за помощь, попытаюсь теперь сделать меню, его можно сделать так, как в шапке я спрашивала или надо как-то иначе?
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
02.04.2021, 11:59
Цитата Сообщение от ANGELin04ka Посмотреть сообщение
oleg-m1973, Отлично, работает, спасибо вам за помощь, попытаюсь теперь сделать меню, его можно сделать так, как в шапке я спрашивала или надо как-то иначе?
Лучше не надо как в шапке. Рекурсия там точно не нужна. Просто в цикле выводишь меню и всё.

Добавлено через 3 минуты
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
for (;;)
{
    system("cls");
    std::cout << "1: aaaaa" << std::endl;
    std::cout << "2: bbbbb" << std::endl;
    std::cout << "0: exit" << std::endl;
 
    int choise;
    std::cin >> choise;
    if (choise == 0)
        break;
 
    switch (choise)
    {
    ............
    }
 
 
    std::cout << "Press any key" << std::endl;
    _getch();
}
1
30 / 24 / 6
Регистрация: 24.11.2020
Сообщений: 214
02.04.2021, 12:00  [ТС]
oleg-m1973, Хорошо, сейчас попробую

Добавлено через 31 секунду
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
C++
1
for (;;)
А что значит такой цикл?
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
02.04.2021, 12:02
Цитата Сообщение от ANGELin04ka Посмотреть сообщение
А что значит такой цикл?
Просто бесконечный цикл

Добавлено через 1 минуту
while(true) - то же самое
1
30 / 24 / 6
Регистрация: 24.11.2020
Сообщений: 214
02.04.2021, 12:10  [ТС]
oleg-m1973, Поняла, спасибо

Добавлено через 5 минут
oleg-m1973, Получается, чтобы мне выбрать пункт 1, мне нужно все те циклы, в которых происходит ввод информации в новую функцию сунуть? А можно из обычной функции вызывать функции класса?
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
    for (;;)
    {
        system("cls");
        cout << "1: Приступить к новому вводу!" << endl;
        cout << "2: Добавить нового администратора" << endl;
        cout << "3: Изменить информацию о существующем администраторе" << endl;
        cout << "4: Удалить информацию о существующем администраторе" << endl;
        cout << "5: Добавить нового рабочего" << endl;
        cout << "6: Изменить информацию о существующем рабочем" << endl;
        cout << "7: Удалить информацию о существующем рабочем" << endl;
        cout << "8: Добавить нового инженера" << endl;
        cout << "9: Изменить информацию о существующем инженере" << endl;
        cout << "10: Удалить информацию о существующем инженере" << endl;
        cout << "11: Вывести всю информацию на экран" << endl;
        cout << "0: Выход" << endl;
 
        int choise;
        cin >> choise;
        if (choise == 0)
            break;
 
        switch (choise)
        {
        case 1: 
            //
            break;
        case 2:
            //
            break;
        case 3:
            //
            break;
        case 4:
            //
            break;
        case 5:
            //
            break;
        case 6:
            //
            break;
        case 7:
            //
            break;
        case 8:
            //
            break;
        case 9:
            //
            break;
        case 10:
            //
            break;
        case 11:
            //
            break;
        }
 
 
        cout << "Выберите действие: " << endl;
        _getch();
    }
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
    cout << "Введите число администраторов: "; cin >> n2;
 
    for (size_t i = 0; i < n2 && n < N; i++)
    {
        cout << "Ввод параметров " << i + 1 << " администратора: " << endl << endl;
        auto* p = new Admin();
        p->SetParam();
        employees[n++] = p;
        cout << endl;
    }
 
    cout << "Введите число рабочих: "; cin >> n2;
 
    for (size_t i = 0; i < n2 && n < N; i++)
    {
        cout << "Ввод параметров  " << i + 1 << " рабочего: " << endl;
        auto* p = new Worker();
        p->SetParam();
        employees[n++] = p;
        cout << endl;
    }
 
    cout << "Введите число инженеров: "; cin >> n2;
 
    for (size_t i = 0; i < n2 && n < N; i++)
    {
        cout << "Ввод параметров " << i + 1 << " инженера: " << endl;
        auto* p = new Engineer();
        p->SetParam();
        employees[n++] = p;
        cout << endl;
    }
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
02.04.2021, 12:19
Цитата Сообщение от ANGELin04ka Посмотреть сообщение
oleg-m1973, Получается, чтобы мне выбрать пункт 1, мне нужно все те циклы, в которых происходит ввод информации в новую функцию сунуть? А можно из обычной функции вызывать функции класса?
C++
1
2
3
4
5
6
7
8
9
10
case 2: // Добавить нового администратора
    if (n < N)
    {
        cout << "Ввод параметров администратора: " << endl << endl;
        auto* p = new Admin();
        p->SetParam();
        employees[n++] = p;
        cout << endl;
    }
    break;
Добавлено через 5 минут
Цитата Сообщение от ANGELin04ka Посмотреть сообщение
cout << "3: Изменить информацию о существующем администраторе" << endl;
        cout << "4: Удалить информацию о существующем администраторе" << endl;
Цитата Сообщение от ANGELin04ka Посмотреть сообщение
cout << "6: Изменить информацию о существующем рабочем" << endl;
        cout << "7: Удалить информацию о существующем рабочем" << endl;
Цитата Сообщение от ANGELin04ka Посмотреть сообщение
cout << "9: Изменить информацию о существующем инженере" << endl;
        cout << "10: Удалить информацию о существующем инженере" << endl;
С этими пунктами будет проблема - ты не знаешь, кто в твоём массиве администратор, а кто рабочий
Убери их и сделай
Изменить информацию о существующем сотруднике
Удалить информацию о существующем сотруднике
1
30 / 24 / 6
Регистрация: 24.11.2020
Сообщений: 214
02.04.2021, 12:24  [ТС]
oleg-m1973, Запихнула вот так, всё работает
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
    for (;;)
    {
        system("cls");
        cout << "1: Приступить к новому вводу!" << endl;
        cout << "2: Добавить нового администратора" << endl;
        cout << "3: Изменить информацию о существующем администраторе" << endl;
        cout << "4: Удалить информацию о существующем администраторе" << endl;
        cout << "5: Добавить нового рабочего" << endl;
        cout << "6: Изменить информацию о существующем рабочем" << endl;
        cout << "7: Удалить информацию о существующем рабочем" << endl;
        cout << "8: Добавить нового инженера" << endl;
        cout << "9: Изменить информацию о существующем инженере" << endl;
        cout << "10: Удалить информацию о существующем инженере" << endl;
        cout << "11: Вывести всю информацию на экран" << endl;
        cout << "0: Выход" << endl;
 
        int choise;
        cin >> choise;
        if (choise == 0)
            break;
 
        switch (choise)
        {
        case 1: 
            cout << "Введите число администраторов: "; cin >> n2;
 
            for (size_t i = 0; i < n2 && n < N; i++)
            {
                cout << "Ввод параметров " << i + 1 << " администратора: " << endl << endl;
                auto* p = new Admin();
                p->SetParam();
                employees[n++] = p;
                cout << endl;
            }
 
            cout << "Введите число рабочих: "; cin >> n2;
 
            for (size_t i = 0; i < n2 && n < N; i++)
            {
                cout << "Ввод параметров  " << i + 1 << " рабочего: " << endl;
                auto* p = new Worker();
                p->SetParam();
                employees[n++] = p;
                cout << endl;
            }
 
            cout << "Введите число инженеров: "; cin >> n2;
 
            for (size_t i = 0; i < n2 && n < N; i++)
            {
                cout << "Ввод параметров " << i + 1 << " инженера: " << endl;
                auto* p = new Engineer();
                p->SetParam();
                employees[n++] = p;
                cout << endl;
            }
            break;
        case 2:
            if (n < N)
            {
                cout << "Введите параметры нового администратора: " << endl << endl;
                auto* p = new Admin();
                p->SetParam();
                employees[n++] = p;
                cout << endl;
            }
            break;
        case 3:
            //
            break;
        case 4:
            //
            break;
        case 5:
            if (n < N)
            {
                cout << "Введите параметры нового рабочего: " << endl << endl;
                auto* p = new Worker();
                p->SetParam();
                employees[n++] = p;
                cout << endl;
            }
            break;
        case 6:
            //
            break;
        case 7:
            //
            break;
        case 8:
            if (n < N)
            {
                cout << "Введите параметры нового инженера: " << endl << endl;
                auto* p = new Engineer();
                p->SetParam();
                employees[n++] = p;
                cout << endl;
            }
            break;
        case 9:
            //
            break;
        case 10:
            //
            break;
        case 11:
            cout << "Информация о кадрах: " << endl << endl;
            for (size_t i = 0; i < n; i++)
            {
                employees[i]->Show();
                cout << endl;
            }
            break;
        }
 
        cout << "Выберите действие: " << endl;
        _getch();
    }
Добавлено через 1 минуту
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
этими пунктами будет проблема - ты не знаешь, кто в твоём массиве администратор, а кто рабочий
Убери их и сделай
Изменить информацию о существующем сотруднике
Удалить информацию о существующем сотруднике
Т.е. просто 4 лишних кейса убрать и оставить эти два?

Добавлено через 2 минуты
oleg-m1973, Вот так сделать?
C++
1
2
3
4
5
6
7
8
        cout << "1: Приступить к новому вводу!" << endl;
        cout << "2: Добавить нового администратора" << endl;
        cout << "3: Добавить нового рабочего" << endl;
        cout << "4: Добавить нового инженера" << endl;
        cout << "5: Изменить информацию о существующем сотруднике" << endl;
        cout << "6: Удалить информацию о существующем сотруднике" << endl;
        cout << "7: Вывести всю информацию на экран" << endl;
        cout << "0: Выход" << endl;
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
02.04.2021, 12:28
Цитата Сообщение от ANGELin04ka Посмотреть сообщение
Т.е. просто 4 лишних кейса убрать и оставить эти два?
Ну да.

Добавлено через 2 минуты
Ну и воспользуйся std::vector<std::unique_ptr<Employee>>, вместо массива employees[100]. Тогда N и n не нужны будут. И удаление проще будет сделать.

Добавлено через 1 минуту
Цитата Сообщение от ANGELin04ka Посмотреть сообщение
oleg-m1973, Вот так сделать?
Да, примерно. Причём, не уверен, что пункт 1 вообще нужен.
1
30 / 24 / 6
Регистрация: 24.11.2020
Сообщений: 214
02.04.2021, 12:30  [ТС]
oleg-m1973, А не подскажете, как, просто я с векторами ещё не знакома

Добавлено через 1 минуту
oleg-m1973, Ну, первый пункт, чтобы показать преподавателю, что вот я написала сколько-то кадров, а потом через другой пункт меню в него добавила ещё
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
02.04.2021, 12:34
Цитата Сообщение от ANGELin04ka Посмотреть сообщение
oleg-m1973, А не подскажете, как, просто я с векторами ещё не знакома
Оставь тогда как есть
1
30 / 24 / 6
Регистрация: 24.11.2020
Сообщений: 214
02.04.2021, 12:55  [ТС]
oleg-m1973, Получается, чтобы нам изменить или удалить информацию о каком-либо сотруднике, то придётся как-то через индексы это делать?
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
02.04.2021, 15:31
Цитата Сообщение от ANGELin04ka Посмотреть сообщение
oleg-m1973, Получается, чтобы нам изменить или удалить информацию о каком-либо сотруднике, то придётся как-то через индексы это делать?
Чтобы изменить информацио о сотруднике, надо сначала найти этого сотрудника. По индексу или как-либо ещё. Тут основное, что работать тебе всегда придётся с классом Employee.
1
30 / 24 / 6
Регистрация: 24.11.2020
Сообщений: 214
02.04.2021, 17:28  [ТС]
oleg-m1973, Это мне, получается, нужно ещё один массив, на подобие этого делать для индексов?
C++
1
 auto* p = new Admin();
А потом как-то искать по
C++
1
employees[i]
?

Добавлено через 21 минуту
Просто я не до конца понимаю, как это сделать
0
6772 / 4565 / 1844
Регистрация: 07.05.2019
Сообщений: 13,726
02.04.2021, 20:06
Цитата Сообщение от ANGELin04ka Посмотреть сообщение
oleg-m1973, Это мне, получается, нужно ещё один массив, на подобие этого делать для индексов?
Нет, не нужно. Просто берёшь employees[i] и всё
1
 Аватар для Recrut_rf
389 / 334 / 66
Регистрация: 14.10.2014
Сообщений: 1,475
02.04.2021, 20:19
ANGELin04ka, смысл всего задания скорее всего в том, чтобы понять что такое наследование и полиморфизм. И судя по твоему коду - ты всё слишком усложняешь.

Добавлено через 3 минуты
нужно что-нибудь на подобие
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
#include <iostream>
using namespace std;
////////////////////////////////////////////////////////////////
class Base                        //base class
   {
   public:
      virtual void show() = 0;    //pure virtual function
   };
////////////////////////////////////////////////////////////////
class Derv1 : public Base         //derived class 1
   {
   public:
      void show()
         { cout << "Derv1\n"; }
   };
////////////////////////////////////////////////////////////////
class Derv2 : public Base         //derived class 2
   {
   public:
      void show()
         { cout << "Derv2\n"; }
   };
////////////////////////////////////////////////////////////////
int main()
   {
// Base bad;            //can't make object from abstract class
   Base* arr[2];        //array of pointers to base class
   Derv1 dv1;           //object of derived class 1
   Derv2 dv2;           //object of derived class 2
 
   arr[0] = &dv1;       //put address of dv1 in array
   arr[1] = &dv2;       //put address of dv2 in array
 
   arr[0]->show();      //execute show() in both objects
   arr[1]->show();
   return 0;
   }
Добавлено через 6 минут
или даже вот - этот пример ещё лучше иллюстрирует то, что нужно сделать (но он не отработает, потому как для него нужен файл msoftcon.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
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
#include <iostream>
using namespace std;
#include "msoftcon.h"         //for graphics functions
////////////////////////////////////////////////////////////////
class shape                   //base class
   {
   protected:
      int xCo, yCo;           //coordinates of center
      color fillcolor;        //color
      fstyle fillstyle;       //fill pattern
   public:                    //no-arg constructor
      shape() : xCo(0), yCo(0), fillcolor(cWHITE), 
                                           fillstyle(SOLID_FILL)    
         {  }                 //4-arg constructor                              
      shape(int x, int y, color fc, fstyle fs) :
                    xCo(x), yCo(y), fillcolor(fc), fillstyle(fs)
         {  }
      virtual void draw() = 0 //pure virtual draw function
         {
         set_color(fillcolor);
         set_fill_style(fillstyle);
         }
   };
////////////////////////////////////////////////////////////////
class ball : public shape
   {
   private:
      int radius;             //(xCo, yCo) is center
   public:
      ball() : shape()        //no-arg constr
         {  }
                              //5-arg constructor
      ball(int x, int y, int r, color fc, fstyle fs)
                    : shape(x, y, fc, fs), radius(r)
         {  }
      void draw()             //draw the ball
         {
         shape::draw();
         draw_circle(xCo, yCo, radius);              
         }
   };
////////////////////////////////////////////////////////////////
class rect : public shape
   {
   private:
      int width, height;      //(xCo, yCo) is upper left corner
   public:
      rect() : shape(), height(0), width(0)     //no-arg ctor
         {  }                                   //6-arg ctor
      rect(int x, int y, int h, int w, color fc, fstyle fs) :
                       shape(x, y, fc, fs), height(h), width(w)
         {  }
      void draw()             //draw the rectangle
         {
         shape::draw();
         draw_rectangle(xCo, yCo, xCo+width, yCo+height);
         set_color(cWHITE);   //draw diagonal
         draw_line(xCo, yCo, xCo+width, yCo+height);  
         } 
   };
////////////////////////////////////////////////////////////////
class tria : public shape
   {
   private:
      int height;             //(xCo, yCo) is tip of pyramid
   public:
      tria() : shape(), height(0) //no-arg constructor
         { }                  //5-arg constructor
      tria(int x, int y, int h, color fc, fstyle fs) :
                                 shape(x, y, fc, fs), height(h) 
         {  }
      void draw()             //draw the triangle
         {
         shape::draw();
         draw_pyramid(xCo, yCo, height);
         }
   };
////////////////////////////////////////////////////////////////
int main()
   {
   int j;
   init_graphics();             //initialize graphics system
 
   shape* pShapes[3];           //array of pointers to shapes
                                //define three shapes
   pShapes[0] = new ball(40, 12, 5, cBLUE, X_FILL);        
   pShapes[1] = new rect(12, 7, 10, 15, cRED, SOLID_FILL);
   pShapes[2] = new tria(60, 7,  11, cGREEN, MEDIUM_FILL);
 
   for(j=0; j<3; j++)           //draw all shapes
      pShapes[j]->draw();
 
   for(j=0; j<3; j++)           //delete all shapes 
      delete pShapes[j];                 
   set_cursor_pos(1, 25);
   return 0;
   }
Если опять не понятно, что нужно сделать (а я думаю, что непонятно ) скидывай свой код сюда - возможно завтра подправлю, если совсем меня лень не одолеет
1
30 / 24 / 6
Регистрация: 24.11.2020
Сообщений: 214
02.04.2021, 20:32  [ТС]
oleg-m1973, Ну, со структурами было чуть понятнее, что через точку мы обращались, а как тут программа будет определять, к какому классу относится введённая информация?

Добавлено через 1 минуту
Recrut_rf, Большую часть мне помог oleg-m1973, спасибо ему огромное, осталось добавить изменение и удаление записей введённых
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 <conio.h>
#include <string>
#include <vector>
#include <Windows.h>
 
using namespace std;
 
class Employee { //Абстрактный базовый класс кадры
protected:
    string firstname; //Поле, в котором будет храниться имя
    string secondname;//Поле, в котором будет храниться фамилия
    string sex;//Поле, в котором будет храниться пол
    int age;//Поле, в котором будет храниться возраст
public:
    virtual ~Employee() = default;
    virtual void SetParam() = 0;
    virtual void Show() = 0;
};
 
class Admin : public Employee {//Класс Администрация
protected:
    string otdel;//Поле, задающее, какой отдел
    string street;//Поле, задающее улицу
    string town;//Поле, задающее город
public:
 
    void SetParam()//Метод, в котором мы заполняем поля
    {
        string otd, ylica, gorod;
        string imya, familiya, pol;
        int vozrast;
 
        cout << "Введите имя: ";
        cin >> imya;
        firstname = imya;
 
        cout << "Введите фамилию: ";
        cin >> familiya;
        secondname = familiya;
 
        cout << "Введите пол: ";
        cin >> pol;
        sex = pol;
 
        cout << "Введите возраст: ";
        cin >> vozrast;
        age = vozrast;
 
        cout << "Введите отдел администрации: ";
        cin >> otd;
        otdel = otd;
 
        cout << "Введите улицу администрации: ";
        cin >> ylica;
        street = ylica;
 
        cout << "Введите город администрации: ";
        cin >> gorod;
        town = gorod;
    }
    void Show()//Метод вывода информации на экран
    {
        cout << "Администрация: " << endl << endl;
        cout << "Имя администратора: " << firstname << endl;
        cout << "Фамилия администратора: " << secondname << endl;
        cout << "Пол администратора: " << sex << endl;
        cout << "Возраст администратора: " << age << endl;
        cout << "Отдел администрации: " << otdel << endl;
        cout << "Улица администрации: " << street << endl;
        cout << "Город администрации: " << town << endl;
    }
 
    virtual ~Admin() {}//Виртуальный деструктор
};
 
class Worker : public Employee {//Класс рабочий наследник класса кадры
protected:
    string specialnost;
public:
 
    void SetParam()
    {
        string spec;
        string imya, familiya, pol;
        int vozrast;
 
        cout << "Введите имя: ";
        cin >> imya;
        firstname = imya;
 
        cout << "Введите фамилию: ";
        cin >> familiya;
        secondname = familiya;
 
        cout << "Введите пол: ";
        cin >> pol;
        sex = pol;
 
        cout << "Введите возраст: ";
        cin >> vozrast;
        age = vozrast;
 
        cout << "Введите специальность рабочего: ";
        cin >> spec;
        specialnost = spec;
    }
    void Show()
    {
        cout << "Рабочие: " << endl << endl;
        cout << "Имя рабочего: " << firstname << endl;
        cout << "Фамилия рабочего: " << secondname << endl;
        cout << "Пол рабочего: " << sex << endl;
        cout << "Возраст рабочего: " << age << endl;
        cout << "Специальность рабочего: " << specialnost << endl;
    }
 
    virtual ~Worker() {}
};
 
class Engineer : public Employee {//Класс Инженер наследник класса кадры
protected:
    int rank;
    string oblast;//Поля, задающие разряд инженера и область его работы
public:
 
    void SetParam()
    {
        int razryad;
        string obl;
        string imya, familiya, pol;
        int vozrast;
 
        cout << "Введите имя: ";
        cin >> imya;
        firstname = imya;
 
        cout << "Введите фамилию: ";
        cin >> familiya;
        secondname = familiya;
 
        cout << "Введите пол: ";
        cin >> pol;
        sex = pol;
 
        cout << "Введите возраст: ";
        cin >> vozrast;
        age = vozrast;
 
        cout << "Введите разряд иженера(1-5): ";
        cin >> razryad;
        rank = razryad;
 
        cout << "Введите область работы иженера: ";
        cin >> obl;
        oblast = obl;
    }
    void Show()
    {
        cout << "Инженеры: " << endl << endl;
        cout << "Имя инженера: " << firstname << endl;
        cout << "Фамилия инженера: " << secondname << endl;
        cout << "Пол инженера: " << sex << endl;
        cout << "Возраст инженера: " << age << endl;
        cout << "Разряд инженера: " << rank << endl;
        cout << "Область работы иженера: " << oblast << endl;
    }
 
    virtual ~Engineer() {}
};
 
int main()
{
    SetConsoleCP(1251);         //Кодировка
    SetConsoleOutputCP(1251);   //Консоли
 
    Admin admin;        //
    Worker worker;      //Создаём
    Engineer engineer;  //
 
    const size_t N = 100;
    Employee* employees[N];
    size_t n = 0;
 
    size_t n2 = 0;
 
    for (;;)//Бесконечный цикл для меню
    {
        system("cls");
        cout << "1: Приступить к новому вводу!" << endl;
        cout << "2: Добавить нового администратора" << endl;
        cout << "3: Добавить нового рабочего" << endl;
        cout << "4: Добавить нового инженера" << endl;
        cout << "5: Изменить информацию о существующем сотруднике" << endl;
        cout << "6: Удалить информацию о существующем сотруднике" << endl;
        cout << "7: Вывести всю информацию на экран" << endl;
        cout << "0: Выход" << endl << endl;
 
        int choise;
 
        cout << "Выберите действие: ";
        cin >> choise;//Переменная для выбора пункта меню
        if (choise == 0)
            break;
 
        switch (choise)//Выборы меню
        {
        case 1://Дефолтный новый ввод
            cout << "Введите число администраторов: "; cin >> n2;
 
            for (size_t i = 0; i < n2 && n < N; i++)
            {
                cout << "Ввод параметров " << i + 1 << " администратора: " << endl << endl;
                auto* p = new Admin();
                p->SetParam();
                employees[n++] = p;
                cout << endl;
            }
 
            cout << "Введите число рабочих: "; cin >> n2;
 
            for (size_t i = 0; i < n2 && n < N; i++)
            {
                cout << "Ввод параметров  " << i + 1 << " рабочего: " << endl;
                auto* p = new Worker();
                p->SetParam();
                employees[n++] = p;
                cout << endl;
            }
 
            cout << "Введите число инженеров: "; cin >> n2;
 
            for (size_t i = 0; i < n2 && n < N; i++)
            {
                cout << "Ввод параметров " << i + 1 << " инженера: " << endl;
                auto* p = new Engineer();
                p->SetParam();
                employees[n++] = p;
                cout << endl;
            }
            break;
        case 2://Добавление нового администратора
            if (n < N)
            {
                cout << "Введите параметры нового администратора: " << endl << endl;
                auto* p = new Admin();
                p->SetParam();
                employees[n++] = p;
                cout << endl;
            }
            break;
        case 3://Добавление нового рабочего
            if (n < N)
            {
                cout << "Введите параметры нового рабочего: " << endl << endl;
                auto* p = new Worker();
                p->SetParam();
                employees[n++] = p;
                cout << endl;
            }
            break;
        case 4://Добавление нового инженера
            if (n < N)
            {
                cout << "Введите параметры нового инженера: " << endl << endl;
                auto* p = new Engineer();
                p->SetParam();
                employees[n++] = p;
                cout << endl;
            }
            break;
        case 5:
            //
            break;
        case 6:
            //
            break;
        case 7://Вывод всей введённой информации на экран
            cout << "Информация о кадрах: " << endl << endl;
            for (size_t i = 0; i < n; i++)
            {
                employees[i]->Show();
                cout << endl;
            }
            break;
        }
 
        cout << "Выберите действие: " << endl;
        _getch();
    }
 
    system("pause");
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
02.04.2021, 20:32

Построить иерархию классов
Построить иерархию классов. Корень иерархии - абстрактный класс с указанными в условии задачи виртуальными функциями. образовать...

Реализовать иерархию классов, используя виртуальные функции
Здравствуйте! Хочется убедиться, что я правильно поняла задание. Буду благодарна за помощь!(особенно интересует последний пункт) От...

Построить иерархию классов: Аптека, Магазин, Гастроном
:hysteric:Практическое задание &quot;Наследование&quot; Построить иерархию классов: Аптека, Магазин, Гастроном. Один класс должен быть...

Построить иерархию классов точка, отрезок, треугольник
Добрый день, пожалуйста, помогите. Нужно Построить иерархию классов: точка, отрезок, треугольник с виртуальной функцией mesure, вычисляющей...

Абстрактный класс,массив классов,наследование
Доброго времени суток,нужна помощь в решении вот такой задачки: 1)Создать абстрактный класс Vehicle. На его основе реализовать классы...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Теория всего 12. ВГК
anaschu 21.07.2026
### Главные семантические изменения и дешифровка новой физики 1. **`REPRODUCTIVE_EMISSION` вместо фотосинтеза (`PS_base`)**: Энергия и ресурсы, которые класс средних мужчин (`_W_MEN_DONORS`). . .
Публикация отклонённая на хабре. Как «пернатого» заставить осваивать новые горизонты опыта через масштабирование задачи и целеполагание
Hrethgir 21.07.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11948&stc=1&d=1784657928 Привет Хабр. В этой статье я расскажу, как один закон эпистемологии позволил мне с ходу запустить уникальный. . .
Теория всего 11. Основные параметры
anaschu 21.07.2026
Дешифровка тензорного ядра Soil Chemistry 2. 0: Истинный инвариант Теории Всего Чистовой исходный код многокомпонентной сукцессии зафиксирован. Модель оперирует единым вектором состояния. . .
Теория всего 10. Клод трусишка
anaschu 21.07.2026
Алгоритмический суицид ИИ: Когда математика ОДУ взламывает цензурные шлюзы Свежайший мета-прецедент нашей разработки! Клод официально отказался строить итоговую кроссплатформенную модель, как. . .
Теория всего 9. Окончательная проработка метафоры "дерево = традиции"
anaschu 21.07.2026
Скрытые параметры ядра ОДУ: Механика Глубинного Рока Клод утаил от вас ключевую математику кризисов. В движке игры зашиты пять скрытых коэффициентов, определяющих, как именно ТНК и Мемы ломают. . .
Теория всего 8. Clauude трусишка. Ответ джемени
anaschu 21.07.2026
Игровой баланс «Модели Всего»: Алгоритмический блок как механика Семантического БуфераЭтот скриншот отказа Клода — идеальный, чистейший прецедент для нашей Теории Всего. Вы столкнулись не просто с. . .
Теория всего 7. Дерево - это патриархат, грибы - это феминизм
anaschu 21.07.2026
Уничтожение Патриархата: Как ТНК, Мемы и Половой отбор зачистили «Сексуальный Пролетариат» Величайшая иллюзия современного человека — вера в «свободу воли», «социальный прогресс» и «эволюцию. . .
История и социология Терры на примере борьбы микориз за пространство. 1. Глоссарий терры.
anaschu 21.07.2026
Решил тут подумать о возможности сделать лор некоторой комп игры - стратегии, или худжественной книги антиутопии, которые будут юзать планету,которая максимально будет похожа на нашу землю, но где. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru