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

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

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

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

16.07.2014, 21:29. Просмотров 252. Ответов 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;
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.07.2014, 21:29
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Использование перегруженного оператора << (C++):

Использование перегруженного оператора ввода/вывода в поток базового класса для объекта производного класса - C++
Здравствуйте! Можно ли использовать перегруженный оператор ввода/вывода в поток из базового класса для объекта производного класса, если...

Вызов перегруженного оператора - C++
В классе Ellipse есть перезагрузка, не могу ее вызвать в main вот само задание: Создать класс Ellipse,содержащий следующие...

Странный вывод перегруженного оператора - C++
Здравствуйте. Делаю цепочки вывода, но получается вот что: Почему выводится число 0x605508 ? Непечатный символ что-ли какой-то? И,...

указатель this внутри перегруженного оператора сложения - C++
пишу класс Fraction для работы с дробными числами. Почему не допускает использовать this, пишет: &quot;Error: оператор this можно использовать...

Ошибка при вызове в switch перегруженного оператора - C++
есть перегруженный оператор: std::istream&amp; operator&gt;&gt;(istream&amp; is, diagram&amp; dd) { string kod; std::cout&lt;&lt;&quot;Vvedite kod:&quot;&lt;&lt;endl; ...

Шаблон класса и перегруженного оператора отказываются дружить - C++
Всем привет! Помогите разобраться с шаблонами, не получается подружить шаблон класса и шаблон перегруженного оператора. Выдает ошибку. ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
zss
Модератор
Эксперт С++
6382 / 5947 / 1927
Регистрация: 18.12.2011
Сообщений: 15,264
Завершенные тесты: 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;
1
Spirit370
1 / 1 / 2
Регистрация: 08.08.2013
Сообщений: 86
16.07.2014, 21:59  [ТС] #3
C++
1
friend  ostream& operator<<(ostream& os,Name_pairs& a)
Что за куча не знакомых слов(
0
zss
Модератор
Эксперт С++
6382 / 5947 / 1927
Регистрация: 18.12.2011
Сообщений: 15,264
Завершенные тесты: 1
16.07.2014, 22:25 #4
friend - функция не является членом класса, но имеет доступ к закрытой части.
ostream - класс вывода в поток.
Вроде все!
0
Tulosba
:)
Эксперт С++
4395 / 3238 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
16.07.2014, 22:51 #5
const потерялся у выводимого типа:
C++
1
friend ostream& operator<<(ostream& os, const Name_pairs& a);
0
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;
}
то функция не имеет доступа к скрытым даннным
0
Tulosba
:)
Эксперт С++
4395 / 3238 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
17.07.2014, 07:49 #7
Spirit370, для этого и пишут friend. Читайте внимательнее (сообщение #4)
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.07.2014, 07:49
Привет! Вот еще темы с ответами:

Синтаксическая ошибка при определении метода перегруженного оператора,за классом - C++
Есть два класса. Point1 и Pointer1 Синтаксическая Ошибка в Pointer1.cpp в перегрузке операторов. Point1.h #pragma once ...

Почему не вызывается ни конструктор копий, ни функция перегруженного оператора присвоения - C++
Привет. Начал изучать C++, дошел до темы перегрузки операторов. И запарился на одном месте. Есть класс Dog: class Dog { public:...

Ошибка при использовании перегруженного оператора вывода в поток: no match for 'operator<<' - C++
Пытаюсь написать класс комплексных чисел, но не могу сделать вот что: #include &lt;iostream&gt; #include &quot;head.h&quot; using namespace std; ...

Использование оператора If - C++
Удалите тему, поторопился


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
17.07.2014, 07:49
Ответ Создать тему
Опции темы

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