Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
2 / 2 / 1
Регистрация: 18.04.2017
Сообщений: 48
1

Перегруженные операции извлечения из потока и вставки в поток

24.05.2019, 18:20. Показов 861. Ответов 8

Здравствуйте. Написал программы: создаю студентов и указываю их оценки по предметам, потом сортирую их по среднему баллу и вывожу студентов, у которых все предметы на 4-5.

Программа работает хорошо, но нужно еще использовать операции извлечения и операции вставки. Не совсем до понимаю механизм их работы. Если это не затратно по времени, был бы благодарен, кто бы дописал код с использованием этих операторов, а я бы в следствии разобрался в принципе их работ
Операторы:
istream& operator >> (istream& in. Student& ob);
ostream& operator << (ostream& out, Student& ob);

Код:

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
using namespace std;
 
typedef unsigned short US;
 
class Student
{
private:
 
    char* name;
    US group_number;
    US mark[5];
 
public:
 
    Student(void);
    ~Student(void);
    Student Input(void);
    void Show(void);
    double MiddleMark(void);
    bool GoodMark(void);
    void ShowNameGroup(void);
};
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
#include "student.h"
#include <iostream>
 
Student::Student(void)
{
    name = new char[50];
    group_number = 0;
    size_t i = 0;
    for (i = 0; i < 5; ++i)
    {
        mark[i] = 0;
    }
}
 
Student::~Student(void){}
 
Student Student::Input(void)
{
    name = new char[50];
    cout << "Input name: ";
    cin >> name;
    cout << "Input group number: ";
    cin >> group_number;
    size_t i = 0;
    cout << "Input informafion about marks:\n";
    for (i = 0; i < 5; ++i)
    {
        cout << i + 1 << " subject: ";
        cin >> mark[i];
    }
    return *this;
}
 
void Student::Show(void)
{
    cout << "Name: " << name << endl;
    cout << "Group number " << group_number << endl;
    size_t i = 0;
    cout << "Informafion about marks:\n";
    for (i = 0; i < 5; ++i)
    {
        cout << i + 1 << "subject: " << mark[i] << endl;
    }
    cout << endl;
}
 
 
 
double Student::MiddleMark(void)
{
    double temp = 0;
    size_t i = 0;
    for (i = 0; i < 5; ++i)
        temp += mark[i];
    return temp / 5;
}
 
bool Student::GoodMark(void)
{
    size_t j = 0;
    int a = 0;
    for (j = 0; j < 5; ++j)
    {
        if (mark[j] == 4 || mark[j] == 5)
            a++;
        if (a == 5)
            return true;
    }
    return false;
}
 
void Student::ShowNameGroup(void)
{
    cout << "\nName: " << name << endl;
    cout << "Group number " << group_number << endl;
}
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
#include "student.h"
#include <iostream>
 
using namespace std;
 
int main()
{
    Student* arrStud; //масив
 
    arrStud = (Student*)malloc(sizeof(Student)); //выделяем память (1 елемент в масиве)
    US n = 0;
 
    cout << "Input count of student(s): ";
    cin >> n;
 
    arrStud = (Student*)realloc(arrStud, (n) * sizeof(Student));//расширяем к необходимым размерам
 
    register size_t i = 0, j = 0;
    for (i = 0; i < n; ++i)//читаем информацию
    {
        cout << "\n------ input information about " << i + 1 << " student: ------\n";
        arrStud[i].Input();
    }
 
    Student temp;
    //сортировка
    for (i = 0; i < n; ++i)
        for (j = 0; j < n - 1; ++j)
        {
            if (arrStud[j].MiddleMark() < arrStud[j + 1].MiddleMark())
            {
                temp = arrStud[j];
                arrStud[j] = arrStud[j + 1];
                arrStud[j + 1] = temp;
            }
        }
 
 
    cout << "\n-----------Sort array--------\n";
    for (i = 0; i < n; ++i)
        arrStud[i].Show();
    cout << "-----------------------------\n";
 
    bool isGood = false;
    //ищим отличников :)
    cout << "Student(s) with minimum 1 good mark:\n";
    for (i = 0; i < n; ++i)
    {
        if (arrStud[i].GoodMark())
        {
            isGood = true;
            cout << "This student have a good mark: \n";
            arrStud[i].ShowNameGroup();
        }
    }
 
    if (!isGood) cout << "There is no student with good mark\n";
 
    system("pause");
    return 0;
}
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.05.2019, 18:20
Ответы с готовыми решениями:

Операции левого и правого сдвигов для размещения в поток и извлечения из потока
Учусь в институте на заочке, к нам приехал интересный препод. И короче читал материал по джаве и си...

Перегрузка операции извлечения из потока
подскажите, по заданию необходимо перегрузить операцию извлечения из потока &gt;&gt; для класса...

Непонятно. Сортировка методом вставки + перегруженные функции.
непонятно. помогите пожалуйста. #include &lt;iostream.h&gt; #include &lt;stdlib.h&gt; #include &lt;conio.h&gt;...

Дек: функции вставки, извлечения и вывода
уже очень долго(и счет не в днях) вожусь с кодом и не могу понять почему он работает не корректно....

8
Модератор
Эксперт С++
11068 / 9126 / 5484
Регистрация: 18.12.2011
Сообщений: 24,398
24.05.2019, 19:50 2
Например, так:
C++
1
2
3
4
5
6
7
8
friend ostream& operator << (ostream& out, const Student& ob)
{
   out<<ob.name<<' '<<ob.group_number<<endl;
   for(int i=0;i<5;i++)
     out<<ob.mark[i];
   out<<endl;
   return out;
}
0
2 / 2 / 1
Регистрация: 18.04.2017
Сообщений: 48
02.06.2019, 16:27  [ТС] 3
Всё равно много проблем с этим
Не дает доступ
Можно по подробнее?

Добавлено через 42 минуты
Сделал всё по аналогии, но высвечивает кучу ошибок :c
0
57 / 43 / 12
Регистрация: 27.10.2018
Сообщений: 452
02.06.2019, 16:32 4
Цитата Сообщение от Edudin97 Посмотреть сообщение
Сделал всё по аналогии, но высвечивает кучу ошибок
Мы отсюда не видим что за "куча " у вас.
0
2 / 2 / 1
Регистрация: 18.04.2017
Сообщений: 48
02.06.2019, 16:52  [ТС] 5
Пример:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
    friend istream& operator << (istream& in, const Student& ob)
    {
        name = new char[50];
        in >> ob.name;
        in >> ob.group_number;
        for (int i = 0; i < 5; ++i)
        {
            cout << i + 1 << " subject: ";
            in >> ob.mark[i];
        }
        return in;
    }
    friend ostream& operator << (ostream& out, Student& ob)
    {
        out << ob.name << ' ' << ob.group_number << endl;
        for (int i = 0; i < 5; i++)
            out << ob.mark[i];
        out << endl;
        return out;
    }
Как мне это все взаимосвязать?
0
57 / 43 / 12
Регистрация: 27.10.2018
Сообщений: 452
02.06.2019, 17:11 6
Цитата Сообщение от Edudin97 Посмотреть сообщение
Пример:
Две перегрузки одного оператора , через одну вводим параметры , через вторую выводим .
Зачем?

Добавлено через 10 минут
И что именно связать ?Все перегрузки существуют отдельно одна от другой и работают в соответствии с реализацией при их вызове.
0
2 / 2 / 1
Регистрация: 18.04.2017
Сообщений: 48
02.06.2019, 18:37  [ТС] 7
В том и смысл, что они не работают
Компилятор ругается на всё
Была ошибка "_CRT_SECURE_NO_WARNINGS". Прописал ее в процессах. Все равно не компилирует
0
4334 / 2392 / 995
Регистрация: 07.02.2019
Сообщений: 6,279
02.06.2019, 18:39 8
Edudin97,
Цитата Сообщение от Edudin97 Посмотреть сообщение
friend istream& operator << (istream& in, const Student& ob)
может все таки >> ?

Добавлено через 54 секунды
и const Student& ob запрещает изменять объект
0
57 / 43 / 12
Регистрация: 27.10.2018
Сообщений: 452
03.06.2019, 01:47 9
Цитата Сообщение от Edudin97 Посмотреть сообщение
Компилятор ругается на всё
Опять те же слова .Что за компилятор такой злой у вас ?Мой ругается только на ошибки в коде, а не на все подряд. Было б неплохо нам знать какие именно ошибки у вас , опять же.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.06.2019, 01:47

Перегруженные операции
При прочтении одной книги возник вопрос: при использовании перегруженной операции return возвращает...

Перегруженные операции
Во есть код: using System; class Money { int rub; //рубли int kop; ...

Перегруженные операции
Задача: Класс «Прямая» должен включать поля данных: коэффициенты прямой y = ax +b; методы: вывод...

Перегруженные операции
Создать перегруженную операцию ~, которая будет вычислять отклонение в процентах курсов продажи и...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

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