Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Spirit370
 Аватар для Spirit370
1 / 1 / 2
Регистрация: 08.08.2013
Сообщений: 86
#1

Использование перегруженного оператора << - C++

16.07.2014, 21:29. Просмотров 230. Ответов 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
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
#include <iostream>
#include <conio.h>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
 
class Name_pairs
{
private:
    vector<double> age;
    vector<string> name;
public:
    Name_pairs(){};
    void read_names();
    void read_ages();
    void operator<<(Name_pairs& a)const
    {
        for(int i = 0;i<a.name.size();i++)
        cout << "Name -> " << a.name[i]  << 
        " Age -> " << a.age[i] << endl;
    }
    void sort_this();
};
 
void Name_pairs::sort_this()
{
    vector<string>help_name = name;
    vector<double>new_age;
    sort(name.begin(),name.end());
    for(int i = 0;i<name.size();i++)
{
    int j =0;
    for(;j<name.size();j++)
    {
        if(name[j] == help_name[i]) break;
    }
     new_age.push_back(age[j]);
}
    age = new_age;
}
 
void Name_pairs::read_names()
{
    int i = name.size();
    string n;
    do
    {
    i++;
    cout << "Enter name(" << i << ") -> ";
    cin >> n;
    if(n == "(0)") break;
    name.push_back(n);
    }
    while(true);
}
 
void Name_pairs::read_ages()
{
    int n;
    
    for(int i = 0;i<name.size();i++)
    {
        
        cout << name[i] << " -> ";
        cin >> n;
        
        age.push_back(n);
    }
}
 
 
void main()
{
    setlocale(LC_ALL,"Rus");
    Name_pairs group1;
    group1.read_names();
    cout << endl;
    group1.read_ages();
    cout << endl;
    group1.sort_this();
    cout << endl;
    cout << endl;
    <<group1;
    _getch();
 
}
В классе в функции-члене, я перегрузил оператор <<
C++
1
void operator<<(Name_pairs& a)const
Возникает вопрос, как его теперь использовать. Компилятор на это ругается

C++
1
2
Name_pairs group1;
<<group1;
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.07.2014, 21:29     Использование перегруженного оператора <<
Посмотрите здесь:

Ошибка при вызове в switch перегруженного оператора C++
Шаблон класса и перегруженного оператора отказываются дружить C++
Использование оператора If C++
C++ Синтаксическая ошибка при определении метода перегруженного оператора,за классом
Использование оператора fgets C++
Использование оператора cin.getline C++
Странный вывод перегруженного оператора C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zss
Модератор
Эксперт С++
 Аватар для zss
6115 / 5718 / 1849
Регистрация: 18.12.2011
Сообщений: 14,615
Завершенные тесты: 1
16.07.2014, 21:42     Использование перегруженного оператора << #2
C++
1
2
3
4
5
6
7
friend  ostream& operator<<(ostream& os,Name_pairs& a)
    {
        for(int i = 0;i<a.name.size();i++)
        os << "Name -> " << a.name[i]  << 
        " Age -> " << a.age[i] << endl;
       return os;
    }
и пользоваться как обычно:
C++
1
cout<<group1;
Spirit370
 Аватар для Spirit370
1 / 1 / 2
Регистрация: 08.08.2013
Сообщений: 86
16.07.2014, 21:59  [ТС]     Использование перегруженного оператора << #3
C++
1
friend  ostream& operator<<(ostream& os,Name_pairs& a)
Что за куча не знакомых слов(
zss
Модератор
Эксперт С++
 Аватар для zss
6115 / 5718 / 1849
Регистрация: 18.12.2011
Сообщений: 14,615
Завершенные тесты: 1
16.07.2014, 22:25     Использование перегруженного оператора << #4
friend - функция не является членом класса, но имеет доступ к закрытой части.
ostream - класс вывода в поток.
Вроде все!
Tulosba
:)
Эксперт С++
4384 / 3227 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
16.07.2014, 22:51     Использование перегруженного оператора << #5
const потерялся у выводимого типа:
C++
1
friend ostream& operator<<(ostream& os, const Name_pairs& a);
Spirit370
 Аватар для Spirit370
1 / 1 / 2
Регистрация: 08.08.2013
Сообщений: 86
17.07.2014, 00:26  [ТС]     Использование перегруженного оператора << #6
А как использовать это за пределами класса?
если так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Name_pairs
{
private:
    vector<double> age;
    vector<string> name;
public:
    Name_pairs(){};
    void read_names();
    void read_ages();
    friend  ostream& operator<<(ostream& os,Name_pairs& a);
    void sort_this();
};
ostream& operator<<(ostream& os,Name_pairs& a)
{
for(int i = 0;i<a.name.size();i++)
{
        os << "Name -> " << a.name[i]  << 
        " Age -> " << a.age[i] << endl;
       return os;
}
то функция не имеет доступа к скрытым даннным
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.07.2014, 07:49     Использование перегруженного оператора <<
Еще ссылки по теме:

C++ Программа с использование оператора Switch
Вызов перегруженного оператора C++
C++ Ошибка при использовании перегруженного оператора вывода в поток: no match for 'operator<<'
Почему не вызывается ни конструктор копий, ни функция перегруженного оператора присвоения C++
C++ указатель this внутри перегруженного оператора сложения

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

Или воспользуйтесь поиском по форуму:
Tulosba
:)
Эксперт С++
4384 / 3227 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
17.07.2014, 07:49     Использование перегруженного оператора << #7
Spirit370, для этого и пишут friend. Читайте внимательнее (сообщение #4)
Yandex
Объявления
17.07.2014, 07:49     Использование перегруженного оператора <<
Ответ Создать тему
Опции темы

Текущее время: 02:28. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru