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

Перегрузка operator<< - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Открытие и Закрытие дисковода. http://www.cyberforum.ru/cpp-beginners/thread244074.html
Вот такой у меня код #pragma comment(lib,"winmm.lib") #include <iostream> #include <mmsystem.h> using namespace std; int main () { mciSendString("Set cdaudio door open wait", NULL, 0, NULL);...
C++ Найти максимальный четный элемент массива Здравствуйте! Если вам не сложно - напишите пожалуйста программу для нахождения максимального четного элемента массива на Си. http://www.cyberforum.ru/cpp-beginners/thread244068.html
освоение основ C++
я учусь на инженера программного обеспечения на втором курсе. Нам дают всего по чу-чуть, возникла нужда в самообразовании. Как я выяснил для себя, я плохо знаю основы и самому трудно написать...
MessageBox выводит китайские(японские) иероглифы C++
DWORD dwRead = 0; DWORD buf_size = 4096; DWORD dwSize = GetFileSize(hFile, NULL); char*...
C++ МАТРИЦА РАССТОЯНИЙ ГРАФА http://www.cyberforum.ru/cpp-beginners/thread244052.html
Доброго времени суток! Помогите пожалуйста! Пытаюсь написать программу, которая находила бы матрицу расстояний по матрице смежности. Обыскала всевозможные источники информации. Нашла алгоритм...
C++ Вывести середину строк (между кавычками) в файл Есть файл. Из него читаю по строкам if (strstr( s, " Как можно из каждой найденной такой строки вытянуть текст, находящийся между кавычками? Из строчки нужно выдернуть текст между кавычек... подробнее

Показать сообщение отдельно
IGPIGP
Комп_Оратор)
Эксперт по математике/физике
6511 / 3148 / 308
Регистрация: 04.12.2011
Сообщений: 8,716
Записей в блоге: 5
22.04.2016, 14:41
Тема поднята из глубин небытия, но поскольку всё "новое", это хорошо забытое "старое" хочется что-то изваять. Вот тут тема о вычитании строк:
Написать перегрузку оператора "минус" для строк
Поэтому чуть переделав тот исходник попробую пошутить в этой теме)
Я конечно против перегрузок с неожиданными побочными эффектами, но ради интереса:
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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
#include <iostream>
using namespace std; 
struct Inta
{
int a;
Inta():a(0){}//по умолчанию
Inta(const int rhs):a(rhs){}//преобразования
Inta(const Inta &rhs):a(rhs.a){}//копирующий
Inta &operator=(Inta &rhs)//присваивания
{
a=rhs.a;
return *this; 
}
 
friend
ostream &operator<<(ostream &os, Inta &rhs);
};
 
struct Intb
{
int b;
Intb():b(0){}//по умолчанию
Intb(const int rhs):b(rhs){}//преобразования
Intb(const Intb &rhs):b(rhs.b){}//копирующий
Intb &operator=(Intb &rhs)//присваивания
{
b=rhs.b;
return *this; 
}
 
friend
ostream &operator<<(ostream &os, Intb &rhs);
};
struct Intc
{
int c;
Intc():c(0){}//по умолчанию
Intc(const int rhs):c(rhs){}//преобразования
Intc(const Intc &rhs):c(rhs.c){}//копирующий
Intc &operator=(Intc &rhs)//присваивания
{
c=rhs.c;
return *this; 
}
 
friend
ostream &operator<<(ostream &os, Intb &rhs);
};
 
struct ABC_out_sequence_Checker
{
static Inta * pa;
static Intb * pb;
static Intc * pc;
static ABC_out_sequence_Checker* ABC_checker;
ostream &cacaut(ostream &os)
{
 
if(pa!=NULL && pb!=NULL && pc!=NULL)
{
//тут поля для вывода в нашем распоряжении и мы можем их изменить: 
pa->a=pb->b+pc->c;//например так
pb->b=pc->c*pa->a;//так
pc->c=pb->b/(pa->a+1);//и так
os<<pa->a<<'\t'<<pb->b<<'\t'<<pc->c;
pa=NULL;
pb=NULL;
pc=NULL;
}
return os;
}
ABC_out_sequence_Checker *get_ABC_ptr()
{
static ABC_out_sequence_Checker abc;
if(ABC_checker==NULL)ABC_checker=&abc;
return ABC_checker;
}
private:
ABC_out_sequence_Checker()
{
if(ABC_checker==NULL)ABC_checker=this;
}
};
Inta *
ABC_out_sequence_Checker::pa = NULL;
Intb *
ABC_out_sequence_Checker::pb = NULL;
Intc *
ABC_out_sequence_Checker::pc = NULL;
 
ABC_out_sequence_Checker*
ABC_out_sequence_Checker::ABC_checker=NULL;
ostream &
operator<<(ostream &os, Inta &rhs)
{
    
    if(
        ABC_out_sequence_Checker::ABC_checker->pa==NULL &&
        ABC_out_sequence_Checker::ABC_checker->pb==NULL &&
        ABC_out_sequence_Checker::ABC_checker->pc==NULL
        )
    {
ABC_out_sequence_Checker::ABC_checker->pa=&rhs;
    }
    
    return ABC_out_sequence_Checker::ABC_checker->cacaut(os);
}
ostream &
operator<<(ostream &os, Intb &rhs)
{
    if(
        ABC_out_sequence_Checker::ABC_checker->pa!=NULL &&
        ABC_out_sequence_Checker::ABC_checker->pb==NULL &&
        ABC_out_sequence_Checker::ABC_checker->pc==NULL
        )
    {
ABC_out_sequence_Checker::ABC_checker->pb=&rhs;
    }   
return ABC_out_sequence_Checker::ABC_checker->cacaut(os);
}
ostream &
operator<<(ostream &os, Intc &rhs)
{
    if(
        ABC_out_sequence_Checker::ABC_checker->pa!=NULL &&
        ABC_out_sequence_Checker::ABC_checker->pb!=NULL &&
        ABC_out_sequence_Checker::ABC_checker->pc==NULL
        )
    {
ABC_out_sequence_Checker::ABC_checker->pc=&rhs;
    }   
return ABC_out_sequence_Checker::ABC_checker->cacaut(os);
}
 
int main()
{
 
Inta a(1);
Intb b(2);
Intc c(3);
 
cout<<a<<b<<c<<endl;
cout<<b<<a<<c;
cout<<c<<a<<b;
cout<<a<<b<<c<<endl;
cin.get();
return 0;    
}

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