Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
1 / 1 / 0
Регистрация: 04.04.2015
Сообщений: 19

Создать коллекцию объектов класса

13.03.2020, 13:39. Показов 1433. Ответов 6
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть код класса, все вроде работает.
Но, теперь мне необходимо каким-то образом создать несколько экземпляров класса и, допустим, среди них найти объект с максимальным рейтингом.
Как это сделать? среда VS 2015.

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 "stdafx.h"
#include <stdlib.h>
#include <string>
#include <iostream>
#include <vector>
using namespace std;
 
class Kafedra
{
public:
    std::string _last_name;     //фамилия
    std::string _first_name;    //имя
    std::string _middle_name;   //отчество
    int _year_birth;            //год рождения
    int _year_receipt;          //год поступления
    int _experience;            //педагогический стаж
    std::string _degree;        //степень
    int _number_publications;   //кол-во публикаций
    float _score_rating;        //балл по рейтингу
 
    Kafedra();
    Kafedra(string last_name, string first_name, string middle_name, int year_birth, int year_receipt, int experience, string degree, int number_publications, float score_rating, string address, string marital_status);
    ~Kafedra();
    friend int check(Kafedra &c);
    virtual void print()
    {
        cout << "ФИО: " << _last_name << " "<< _first_name<<" "<< _middle_name << endl;
        cout << "Год рождения: " << _year_birth << endl;
        cout << "Год поступления: " << _year_receipt << endl;
        cout << "Педагогический стаж: " << _experience << endl;
        cout << "Степень: " << _degree << endl;
        cout << "Кол-во публикаций: " << _number_publications << endl;
        cout << "Балл по рейтингу: " << _score_rating << endl;
    };
private:
    
};
 
 
Kafedra::Kafedra()
{
}
Kafedra::~Kafedra()
{
}
 
class Kafedra_1 : public Kafedra
{
    public:
        string _address;
        string _marital_status;
        Kafedra_1(string last_name, string first_name, string middle_name, int year_birth, int year_receipt, int experience, string degree, int number_publications, float score_rating, string address, string marital_status);
};
 
// конструктор объекта
Kafedra::Kafedra(string last_name, string first_name, string middle_name, int year_birth, int year_receipt, int experience, string degree, int number_publications, float score_rating, string address, string marital_status)
{
    _last_name = last_name;
    _first_name = first_name;
    _middle_name = middle_name;
    _year_birth = year_birth;
    _year_receipt = year_receipt;
    _experience = experience;
    _degree = degree;
    _number_publications = number_publications;
    _score_rating = score_rating;
};
 
 
Kafedra_1::Kafedra_1(string last_name, string first_name, string middle_name, int year_birth, int year_receipt, int experience, string degree, int number_publications, float score_rating, string address, string marital_status) :
Kafedra(last_name, first_name, middle_name, year_birth, year_receipt, experience, degree, number_publications, score_rating, address, marital_status)
{
    _address = address;
    _marital_status = marital_status;
};
 
 
int check(Kafedra &c)
{
    int tt, temp;
    cout << "Введите год поступления: ";
    cin >> temp;
    if (c._year_receipt>temp) return (1); else return (0);
 
}
 
 
int main()
{
    setlocale(LC_ALL, "Russian");
    //SetConsoleCP(1251);//русский фонт дл¤ ввода 
    //SetConsoleOutputCP(1251);//русский фонт дл¤ вывода 
    Kafedra_1 Obj_Kafedra("Ф","И","О", 1987, 2001, 10, "степень", 10, 7.88, "адрес","женат");
    if (check(Obj_Kafedra) == 1) Obj_Kafedra.print(); else cout << "Год поступления ниже введенного" << endl;
    system("pause");
    return 0;
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
13.03.2020, 13:39
Ответы с готовыми решениями:

Создать коллекцию объектов
Доброго времени суток. Сдаю академ.разницу. Дали задание : создать коллекцию (контейнер) объектов , при этом с возможностью добавлять,...

Создать vector из объектов класса
Добрый вечер! У меня есть некий класс SuperClass, в котором есть динамическое поле: class SuperClass { public: int *v; ...

Создать контейнер list объектов класса
Здравствуйте! Подскажите, пожалуйста, почему у меня выводятся адреса, вместо значения? У меня задача состоит в том, что нужно создать...

6
 Аватар для Annemesski
2670 / 1333 / 479
Регистрация: 08.11.2016
Сообщений: 3,679
13.03.2020, 15:32
1. Перегрузите в Вашем классе operator>() тот объект больше у которого рейтинг выше
2. Поместите созданные экземпляры в std::vector<>
3. Вызовите для вектора метод std::vector::sort()
4. Выведите первый (нулевой) элемент вектора.
5. ...
6. PROFIT
0
1 / 1 / 0
Регистрация: 04.04.2015
Сообщений: 19
13.03.2020, 16:05  [ТС]
Все это здорово. Но, это должен быть метод класса, как передать в метод vector и как его принять.
0
 Аватар для Annemesski
2670 / 1333 / 479
Регистрация: 08.11.2016
Сообщений: 3,679
13.03.2020, 16:23
передать в метод vector и как его принять.
как параметр функции члена класса, не?
0
1 / 1 / 0
Регистрация: 04.04.2015
Сообщений: 19
13.03.2020, 17:15  [ТС]
да, обработка vector должна быть реализована в классе
0
 Аватар для lemegeton
4903 / 2696 / 921
Регистрация: 29.11.2010
Сообщений: 5,783
13.03.2020, 20:00
Тэкс.
Объект, названый "Kafedra" по составу скорее член научно-преподавательского состава вуза, а не кафедры. Пеерименуем в Employee.
Конструктор не использует ссылки. Исправляем.
Параметров конструктора на два больше, чем полей. Исправляем.
Делаем поля приватными, вместо них выставляются так называемые "акцессоры" -- методы для доступа к полям.
Вместо метода "print" делаем оператор вывода в поток (operator<<).

Теперь перейдём к собственно классу кафедры. Назовем её по-английски "Department".
Пусть, предположим, у кафедры есть название, глава и сотрудники.
По аналогии с Employee, сделаем приватные поля, публичные методы и оператор вывода.

Цитата Сообщение от igor19591962 Посмотреть сообщение
создать несколько экземпляров класса и, допустим, среди них найти объект с максимальным рейтингом.
Цитата Сообщение от igor19591962 Посмотреть сообщение
да, обработка vector должна быть реализована в классе
Учитывая эти требования, добавим в объект Department метод find_best.

Ну и напишем немного кода в главную функцию.

Кликните здесь для просмотра всего текста
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
#include <vector>
#include <iostream>
#include <iomanip>
#include <iterator>
 
class Employee
{
public:
    Employee(const std::string& last_name, const std::string& first_name, const std::string& middle_name, int year_birth,
        int year_receipt, int experience, const std::string& degree, int number_publications,
        float score_rating, const std::string& address, const std::string& marital_status);
    const std::string& get_last_name() const { return last_name; }
    const std::string& get_first_name() const { return first_name; }
    const std::string& get_middle_name() const { return middle_name; }
    int get_year_birth() const { return year_birth; }
    int get_year_receipt() const { return year_receipt; }
    int get_experience() const { return experience; }
    const std::string& get_degree() const { return degree; }
    int get_number_publications() const { return number_publications; }
    float get_score_rating() const { return score_rating; }
    const std::string& get_address() const { return address; }
    const std::string& get_marital_status() const { return marital_status; }
private:
    std::string last_name;     //фамилия
    std::string first_name;    //имя
    std::string middle_name;   //отчество
    int year_birth;            //год рождения
    int year_receipt;          //год поступления
    int experience;            //педагогический стаж
    std::string degree;        //степень
    int number_publications;   //кол-во публикаций
    float score_rating;        //балл по рейтингу
    std::string address;       //адрес
    std::string marital_status;//семейное положение
};
 
Employee::Employee(const std::string& last_name, const std::string& first_name, const std::string& middle_name, 
    int year_birth, int year_receipt, int experience, const std::string& degree, int number_publications,
    float score_rating, const std::string& address, const std::string& marital_status) : last_name(last_name), 
    first_name(first_name), middle_name(middle_name), year_birth(year_birth), year_receipt(year_receipt), 
    experience(experience), degree(degree), number_publications(number_publications), score_rating(score_rating),
    address(address), marital_status(marital_status) {}
 
std::ostream& operator<<(std::ostream& out, const Employee& l) {
    std::cout << "ФИО: " << l.get_last_name() << " " << l.get_first_name() << " " << l.get_middle_name() << std::endl;
    std::cout << "Год рождения: " << l.get_year_birth() << std::endl;
    std::cout << "Год поступления: " << l.get_year_receipt() << std::endl;
    std::cout << "Педагогический стаж: " << l.get_experience() << std::endl;
    std::cout << "Степень: " << l.get_degree() << std::endl;
    std::cout << "Кол-во публикаций: " << l.get_number_publications() << std::endl;
    std::cout << "Балл по рейтингу: " << l.get_score_rating() << std::endl;
    return out;
}
 
class Department {
public:
    Department(const std::string& name, const Employee& head, const std::vector<Employee>& staff) : name(name), 
        head(head), staff(staff) {}
    const std::string& get_name() const { return name; }
    const Employee& get_head() const { return head; }
    const std::vector<Employee>& get_staff() const { return staff; }
    const Employee& get_best() const {
        auto first = staff.begin();
        auto last = staff.end();
        if (first == last) {
            //... тут надо обработать ошибку, что сотрудников нет
        }
        auto largest = first;
        while (++first != last) {
            if ((*largest).get_score_rating() < (*first).get_score_rating()) {
                largest = first;
            }
        }
        return *largest;
    }
private:
    std::string name;
    Employee head;
    std::vector<Employee> staff;
};
 
std::ostream& operator<<(std::ostream& out, const Department& d) {
    out << "Департамент: " << d.get_name() << std::endl;
    out << "Глава: " << d.get_head();
    out << "-------------------------------------------" << std::endl;
    out << "Сотрудники:" << std::endl;
    out << "-------------------------------------------" << std::endl;
    for (const auto& a : d.get_staff()) {
        out << a << "-------------------------------------------" << std::endl;
    }
    return out;
}
 
 
 
int main(int argc, char** argv) {
    Employee ivanov("Ivanov", "Ivan", "Ivanovich", 1969, 2012, 50, "Professor", 5, 4.66f, "Somewhere in USSR", "single");
    Employee petrov("Petrov", "Petr", "Petrovich", 1968, 2013, 45, "Professor", 8, 4.86f, "Somewhere in USSR", "single");
    Employee pavlov("Pavlov", "Pavel", "Pavlovich", 1968, 2013, 45, "Professor", 8, 4.76f, "Somewhere in USSR", "single");
 
    Department historical("Historical", ivanov, { ivanov, petrov, pavlov });
 
    std::cout << historical << std::endl;
 
    std::cout << "Best scored employee: " << std::endl;
    std::cout << historical.get_best() << std::endl;
 
    return 0;
}
0
1 / 1 / 0
Регистрация: 04.04.2015
Сообщений: 19
14.03.2020, 08:42  [ТС]
lemegeton - Я Вам очень благодарен за творческий подход. Я не прав, что не выложил все требования.
Вот они:

Создайте программу с классом Kafedra, который включает в себя следующие данные – элементы о сотрудниках кафедры:
- ФИО;
- год рождения;
- год поступления;
- педагогический стаж;
- степень;
-- количество публикаций;
- балл по рейтингу.
В состав класса входят следующие функции-члены класса:
- конструктор с параметрами;
- функция, которая выводит ФИО преподавателя с минимальным баллом;
- виртуальная функция просмотра текущего объекта.
Производный класс Kafedra _1 содержит следующие элементы:
- домашний адрес;
- семейное положение;
- переопределенную функцию просмотра состояния объекта.
Введите пользовательские данные для работы с классом

Добавлено через 26 минут
Ошибка
C++
1
2
3
4
5
6
7
8
9
10
11
std::ostream& operator<<(std::ostream& out, const Employee& l) 
{
    std::cout << "ФИО: " [B]<<[/B] l.get_last_name() << " " << l.get_first_name() << " " << l.get_middle_name() << std::endl;
    std::cout << "Год рождения: " << l.get_year_birth() << std::endl;
    std::cout << "Год поступления: " << l.get_year_receipt() << std::endl;
    std::cout << "Педагогический стаж: " << l.get_experience() << std::endl;
    std::cout << "Степень: " << l.get_degree() << std::endl;
    std::cout << "Кол-во публикаций: " << l.get_number_publications() << std::endl;
    std::cout << "Балл по рейтингу: " << l.get_score_rating() << std::endl;
    return out;
}
Отсутствует оператор "<<" соответствующий этим операндам Место выделил
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
14.03.2020, 08:42
Помогаю со студенческими работами здесь

Возможно ли создать массив объектов класса?
Здравствуйте, уважаемые специалисты! Делаю приложение по распределению грузов на корабле. Разработала клаcсы Корабль, Палуба и Груз. ...

Создать в классе массив объектов предыдущего класса
Задача такая: Создать иерархию классов для описания предметной области (это я сделал). Последний класс (в моём коде - класс list) должен...

Как создать динамический масссив объектов класса
Видел, как создаются обычные динамический массивы, но сразу с указанием количества элементов, а что делать, если не знаю его количество?...

Как можно еще создать массив объектов класса
допустим у меня есть основной класс и куча классов что наследуют его. помню видео в котором говорили что типа виртуальные функции и...

Как создать список объектов класса и обращаться к их методам?
Для решения одной задачи мне нужно создать список объектов класса, но я не знаю, как это правильно делается, и как потом обращаться к...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru