0 / 0 / 0
Регистрация: 09.12.2021
Сообщений: 81
1

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

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

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

Начал изучать векторы в с++. Решил сделать программку для ввода логина и пароля студента и сохранения их в массиве объектов класса. Массив создал с помощью глобального 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)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.06.2022, 17:37
Ответы с готовыми решениями:

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

Перегрузить оператор сложения для вектора
Всем привет! не компилируется, понять не могу почему, ругается на оператор присваивания, не можжет...

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

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

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

1
403 / 261 / 167
Регистрация: 13.01.2021
Сообщений: 1,162
25.06.2022, 19:52 2
Лучший ответ Сообщение было отмечено 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
25.06.2022, 19:52
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.06.2022, 19:52
Помогаю со студенческими работами здесь

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

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

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

Перегрузить для класса Vector оператор умножения и оператор разности
Перегрузить для класса Vector оператор умножения (умножение вектора на число) Перегрузить оператор...

Как перегрузить оператор [] для map<string, int>?
map&lt;string, int&gt; m; map&lt;string, int&gt;::iterator at, begin, end; string msg; cout &lt;&lt; &quot;Enter...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru