С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 09.12.2021
Сообщений: 81

Как перегрузить оператор << для вектора

25.06.2022, 17:37. Показов 881. Ответов 1

Студворк — интернет-сервис помощи студентам
Доброго времени суток всем!

Начал изучать векторы в с++. Решил сделать программку для ввода логина и пароля студента и сохранения их в массиве объектов класса. Массив создал с помощью глобального vector<>.

И все вроде было нормально, но когда начал делать вывод элементов массива, то выскочила ошибка: отсутствует оператор "<<", соответствующий этим операндам, типы операндов std::ostream << Student. Короче, он говорит что нужно перегрузить оператор "<<", и вот тут пока нет никаких продвижений.

Подскажите как перегрузить оператор << для динамического массива созданного с помощью вектора?

Код:

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
#include <iostream>
#include <vector>
 
using namespace std;
 
 
class Student {
    string login;
    int password;
public:
    Student(string LOG, int PASS): login(LOG), password(PASS){};
    string get_login() { return login; };
    int get_pass() { return password; };
    ~Student();
 
    friend ostream& operator << (ostream& os, const Student& arr) {
        for (int i = 0; i < sizeof(arr); i++) {
            os << arr.Arr[i] << " "; //тут ошибка
        }
    };
};
 
vector<Student> Arr;
 
int main()
{
    setlocale(LC_ALL, "1251");
    string login;
    int password;
 
    do {
        cout << "Enter login: " << login << endl;
        cout << "Enter password: " << password << endl;
        for (int i = 0; i < sizeof Arr; i++) {
            Arr[i] = Student(login, password);
        };
    } while (login != "X");
 
    for (int i = 0; i < sizeof Arr; i++) {
        cout << Arr[i] << endl;
    }
}
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.06.2022, 17:37
Ответы с готовыми решениями:

Как перегрузить оператор вывода в поток для вектора?
Стало интересно реализовать подобный функционал, и конечно же ничего не работает. При этом коде: template&lt;class T&gt; ...

Перегрузить оператор сложения для вектора
Всем привет! не компилируется, понять не могу почему, ругается на оператор присваивания, не можжет сложить #include &lt;windows.h&gt; ...

Как перегрузить оператор [] для двумерного массива?
Здравствуйте! Есть класс матрица, где в приватном доступе есть Type** matrix. Как из тела программы(т.е. вне класса) изменить значение...

1
404 / 261 / 168
Регистрация: 13.01.2021
Сообщений: 1,162
25.06.2022, 19:52
Лучший ответ Сообщение было отмечено Retr0Hacker как решение

Решение

Retr0Hacker, эх, с чего бы начать. Вы в классе перезагружаете оператор <<, но класс не имеет внутри себя вектора. Да и перезагружаете не правильно.

Добавлено через 2 минуты
Retr0Hacker, да и вектором пользуетесь не правильно.

Добавлено через 2 минуты
Retr0Hacker, не пойму зачем там поля login и password
Цитата Сообщение от Retr0Hacker Посмотреть сообщение
cout << "Enter login: " << login << endl;
        cout << "Enter password: " << password << endl;
Добавлено через 2 минуты
Retr0Hacker, вы можете сделать вывод и всю прочую штуку вот таким способом
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
#include <iostream>
#include <vector>
using namespace std;
 
class Student {
    string login;
    int password;
public:
    Student(string LOG, int PASS): login(LOG), password(PASS){};
    string get_login() { return login; };
    int get_pass() { return password; };
    ~Student(){};
 
    friend ostream& operator << (ostream& os, Student& arr);
};
ostream& operator << (ostream& os, Student& arr) {
    os << "Логин: " << arr.get_login() << ". Пароль: " << arr.get_pass() << endl;
    return os;
};
 
int main()
{
    setlocale(LC_ALL, "1251");
    string login;
    int password;
    vector<Student> Arr;
    do {
        cout << "Enter login: ";
        cin >> login;
        cout << "Enter password: ";
        cin >> password;
        Arr.push_back(Student(login, password));
    } while (login != "X");
    vector<Student>::iterator it = Arr.begin();
    for(; it != Arr.end(); ++it){
        cout << *it;
    }
}
Добавлено через 17 минут
Retr0Hacker, можете сделать даже так
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
#include <iostream>
#include <vector>
using namespace std;
 
class Student {
    string login;
    int password;
public:
    Student(string LOG, int PASS): login(LOG), password(PASS){};
    string get_login() { return login; };
    int get_pass() { return password; };
    ~Student(){};
 
    friend ostream& operator << (ostream& os, Student& arr);
};
ostream& operator << (ostream& os, Student& arr) {
    os << "Логин: " << arr.get_login() << ". Пароль: " << arr.get_pass() << endl;
    return os;
};
 
class Vector{
    public:
        void push_back(Student st){
            arr.push_back(st);
        }
        friend ostream& operator << (ostream& os, Vector& vec);
    private:
        int size(){
            return arr.size();
        }
        vector<Student> arr;
};
 
ostream& operator << (ostream& os, Vector& vec){
    for(int i = 0; i < vec.size(); ++i){
        os << vec.arr[i];
    }
    return os;
}
 
int main()
{
    setlocale(LC_ALL, "1251");
    string login;
    int password;
    Vector Arr;
    do {
        cout << "Enter login: ";
        cin >> login;
        cout << "Enter password: ";
        cin >> password;
        Arr.push_back(Student(login, password));
    } while (login != "X");
    cout << Arr;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
25.06.2022, 19:52
Помогаю со студенческими работами здесь

Как перегрузить оператор для своего класса?
У меня есть класс, .h class Vertex { public: ~Vertex(); Vertex(); double GetX(); double GetY(); double GetZ(); void...

Как перегрузить оператор [][] для разреженной матрицы?
как перегрузить оператор для разреженной матрицы?знаю, что такого оператора нет, есть только , но все равно не понимаю как его перегрузить

Как перегрузить оператор += для двух массивов?
Добрий вечер всме! Постигаю азы ООП, но уже имеются временные трудности( Задание такое: Перегрузить операции &lt; (сравнение двух...

Как перегрузить оператор += для двух массивов?
Доброе утречко всем! Постигаю азы ООП, но уже имеются временные трудности( Задание такое: Перегрузить операции &lt; (сравнение двух...

Как перегрузить оператор индексации для указателя
#define HIGH_H 0 #define LOW_H 1 #define OPEN_H 2 #define CLOSE_H 3 #define VOLUME_H 4 #define HER_H 5 class Candle { ...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru