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

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

Войти
Регистрация
Восстановить пароль
 
Omenjke
Сообщений: n/a
#1

Как переделать friend-перегрузки ввода/вывода в метод класса? - C++

07.05.2011, 00:54. Просмотров 738. Ответов 3
Метки нет (Все метки)

Доброго времени суток!
Есть вопрос: как переделать френдовые перегрузки ввода\вывода в метод класса?
Или же как шаблонить френдовые перегрузки?
Заранее спасибо.
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
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
#include <iostream>
 
using namespace std;
 
class dmasiv
{
public :
dmasiv();
dmasiv (int x);
dmasiv (int s, int b);
dmasiv (dmasiv &c);
void creatData();
void getData();
dmasiv operator +(const dmasiv& k);
dmasiv& operator =(const dmasiv& q);
dmasiv operator -(const dmasiv& k);
dmasiv operator *(const dmasiv& k);
friend ostream& operator<<(ostream& s,const dmasiv& a) ;
friend istream& operator>>(istream& s,dmasiv& a);
~dmasiv();
protected:
int n, m;
int** a;
};
void dmasiv::creatData()
{
 
a = new int*[n];
for(int i=0;i<n;i++)
{
  a[i] = new int[m];
}
}
void dmasiv::getData()
{
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
cout<<"a["<<i<<"]["<<j<<"]="<<a[i][j]<<endl;
}
 
dmasiv::dmasiv()
{
n=1;
m=1;
a = new int*[n];
for(int i=0;i<n;i++)
{
  a[i] = new int[m];
}
for(int i=0;i<n; i++)
for (int j=0;j<m;j++)
a[0][0]=12;
}
 
dmasiv::dmasiv(int s ,int  b)
{
n=s;
m=b;
}
dmasiv::dmasiv(int x)
{
n=x;
m=x;
}
 
 
dmasiv::dmasiv(dmasiv &c)
{
n=c.n;
m=c.m;
a = new int*[n];
for(int i=0;i<n;i++)
{
  a[i] = new int[m];
}
for(int i=0;i<n; i++)
for (int j=0;j<m;j++)
a[i][j]=c.a[i][j];
}
dmasiv::~dmasiv()
{
for(int i = 0; i < n; i++)
delete[] a[i];
delete[] a;
}
dmasiv dmasiv::operator -(const dmasiv& k)
{
dmasiv q;
for(int i=0;i<n;i++)
delete [] q.a[i];
delete []q.a;
q.n=k.n;
q.m=k.m;
q.a=new int*[q.n];
for(int i=0 ; i<q.n ; i++)
q.a[i]=new int[q.m];
for(int i=0;i<q.n;i++)
for(int j=0;j<q.m;j++)
    {q.a[i][j]=0;}
for (int i=0 ; i<q.n ; i++)
for (int j=0 ; j<q.m ; j++)
q.a[i][j]=a[i][j]-k.a[i][j];
return q;
}
dmasiv dmasiv::operator *(const dmasiv& k)
{
dmasiv q;
for(int i=0;i<n;i++)
delete [] q.a[i];
delete []q.a;
q.n=k.n;
q.m=k.m;
q.a=new int*[q.n];
for(int i=0 ; i<q.n ; i++){
q.a[i]=new int[q.m];}
for(int i=0;i<q.n;i++)
for(int j=0;j<q.m;j++)
    {q.a[i][j]=0;}
for(int i=0;i<q.n;i++)
for(int j=0;j<q.m;j++)
q.a[i][j]=a[i][j]*k.a[i][j];
return q;
}
dmasiv dmasiv::operator +(const dmasiv& k)
{
int i, j;
dmasiv q;
q.n=k.n;
q.m=k.m;
for(i = 0; i < n; i++)
delete[] q.a[i];
delete[] q.a;
q.a=new int*[q.n];
for(i=0;i<n;i++)
q.a[i]=new int[q.m];
for(int i=0;i<q.n;i++)
for(int j=0;j<q.m;j++)
    {q.a[i][j]=0;}
for (i=0;i<q.n;i++)
for (j=0;j<q.m;j++)
q.a[i][j]=k.a[i][j]+a[i][j];
return q;
}
dmasiv& dmasiv::operator =(const dmasiv& q)
  {
    delete[] a;
    n=q.n;
    m=q.m;
    a=new int*[n];
    for(int i=0 ; i<n ; i++)
    a[i]=new int[m];
    for(int i=0; i<n; i++)
    for (int j=0;j<m;j++) a[i][j]=q.a[i][j];
    return *this;
  }
 
istream& operator>>(istream& s, dmasiv& q)
{
for(int i=0;i<q.n; i++)
for (int j=0;j<q.m;j++)
cin>>q.a[i][j];
      return s;
 
}
ostream& operator<<(ostream& s,const dmasiv& w)
{
for(int i=0;i<w.n; i++)
for (int j=0;j<w.m;j++)
 cout<<"a["<<i<<"]["<<j<<"]="<<w.a[i][j]<<endl;
 return (s);
}
 
int main()
{
int x, i;
dmasiv q;
cout<<"Input size of matrix."<<endl;
cout<<"For example 2 = 2x2"<<endl;
cin>>x;
dmasiv o(x);
dmasiv k(x);
o.creatData();
cout<<"Input element's of matrix O"<<endl;
cin>>o;
k.creatData();
cout<<"Input element's of matrix K"<<endl;
cin>>k;
cout<<" Menu"<<endl;
cout<<"1. Multiplication"<<endl;
cout<<"2. Sum"<<endl;
cout<<"3. Minus"<<endl;
cin>>i;
switch(i)
{
case 1:q = o * k;cout<<q<<endl;break;
case 2:q = o + k;cout<<q<<endl;break;
case 3:q = o - k;cout<<q<<endl;break;
default: cout<<"Incorect input"<<endl;break;
}
system("pause");
return 0;
}
Добавлено через 5 часов 57 минут
Можно закрывать, разобрался.
Вот код если вдруг кому то понадобится пример.
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
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
#include <iostream>
 
using namespace std;
template <class Type>
class dmasiv
{
public :
dmasiv();
dmasiv (int x);
dmasiv (int s, int b);
dmasiv (dmasiv <Type>&c);
void creatData();
void setData();
void getData();
dmasiv operator +(const dmasiv<Type>& k);
dmasiv& operator =(const dmasiv<Type>& q);
dmasiv operator -(const dmasiv<Type>& k);
dmasiv operator *(const dmasiv<Type>& k);
~dmasiv();
protected:
int n, m;
Type** a;
};
template <class Type>
void dmasiv<Type>::setData()
{
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
cin>>a[i][j];
}
template <class Type>
void dmasiv<Type>::creatData()
{
 
a = new Type*[n];
for(int i=0;i<n;i++)
{
  a[i] = new Type[m];
}
}
template <class Type>
void dmasiv<Type>::getData()
{
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
cout<<"a["<<i<<"]["<<j<<"]="<<a[i][j]<<endl;
}
template <class Type>
dmasiv<Type>::dmasiv()
{
n=1;
m=1;
a = new Type*[n];
for(int i=0;i<n;i++)
{
  a[i] = new Type[m];
}
for(int i=0;i<n; i++)
for (int j=0;j<m;j++)
a[0][0]=12;
}
template <class Type>
dmasiv<Type>::dmasiv(int s ,int  b)
{
n=s;
m=b;
}
template <class Type>
dmasiv<Type>::dmasiv(int x)
{
n=x;
m=x;
}
template <class Type>
dmasiv<Type>::dmasiv(dmasiv<Type>&c)
{
n=c.n;
m=c.m;
a = new Type*[n];
for(int i=0;i<n;i++)
{
  a[i] = new Type[m];
}
for(int i=0;i<n; i++)
for (int j=0;j<m;j++)
a[i][j]=c.a[i][j];
}
template <class Type>dmasiv<Type>::~dmasiv()
{
for(int i = 0; i < n; i++)
delete[] a[i];
delete[] a;
}
template <class Type>
dmasiv<Type> dmasiv<Type>::operator -(const dmasiv<Type>& k)
{
dmasiv q;
for(int i=0;i<n;i++)
delete [] q.a[i];
delete []q.a;
q.n=k.n;
q.m=k.m;
q.a=new Type*[q.n];
for(int i=0 ; i<q.n ; i++)
q.a[i]=new Type[q.m];
for(int i=0;i<q.n;i++)
for(int j=0;j<q.m;j++)
    {q.a[i][j]=0;}
for (int i=0 ; i<q.n ; i++)
for (int j=0 ; j<q.m ; j++)
q.a[i][j]=a[i][j]-k.a[i][j];
return q;
}
template <class Type>
dmasiv<Type> dmasiv<Type>::operator *(const dmasiv<Type>& k)
{
dmasiv q;
for(int i=0;i<n;i++)
delete [] q.a[i];
delete []q.a;
q.n=k.n;
q.m=k.m;
q.a=new Type*[q.n];
for(int i=0 ; i<q.n ; i++){
q.a[i]=new Type[q.m];}
for(int i=0;i<q.n;i++)
for(int j=0;j<q.m;j++)
    {q.a[i][j]=0;}
for(int i=0;i<q.n;i++)
for(int j=0;j<q.m;j++)
q.a[i][j]=a[i][j]*k.a[i][j];
return q;
}
template <class Type>
dmasiv<Type> dmasiv<Type>::operator +(const dmasiv<Type>& k)
{
int i, j;
dmasiv q;
q.n=k.n;
q.m=k.m;
for(i = 0; i < n; i++)
delete[] q.a[i];
delete[] q.a;
q.a=new Type*[q.n];
for(i=0;i<n;i++)
q.a[i]=new Type[q.m];
for(int i=0;i<q.n;i++)
for(int j=0;j<q.m;j++)
    {q.a[i][j]=0;}
for (i=0;i<q.n;i++)
for (j=0;j<q.m;j++)
q.a[i][j]=k.a[i][j]+a[i][j];
return q;
}
template <class Type>
dmasiv<Type>& dmasiv<Type>::operator =(const dmasiv<Type>& q)
  {
    delete[] a;
    n=q.n;
    m=q.m;
    a=new int*[n];
    for(int i=0 ; i<n ; i++)
    a[i]=new int[m];
    for(int i=0; i<n; i++)
    for (int j=0;j<m;j++) a[i][j]=q.a[i][j];
    return *this;
  }
 
template <class Type>
istream& operator >> (istream& s, dmasiv<Type>& q);
template <class Type>
istream& operator>>(istream& s, dmasiv<Type>& q)
{
q.setData();
return s;
}
template<class Type> ostream& operator<<(ostream& s,  dmasiv<Type>& w);
template <class Type>
ostream& operator<<(ostream& s, dmasiv<Type>& w)
{
w.getData();
return (s);
}
int main()
{
int x, i;
dmasiv<int> q;
cout<<"Input size of matrix."<<endl;
cout<<"For example 2 = 2x2"<<endl;
cin>>x;
dmasiv<int> o(x);
dmasiv<int> k(x);
o.creatData();
cout<<"Input element's of matrix O"<<endl;
cin>>o;
k.creatData();
cout<<"Input element's of matrix K"<<endl;
cin>>k;
cout<<" Menu"<<endl;
cout<<"1. Multiplication"<<endl;
cout<<"2. Sum"<<endl;
cout<<"3. Minus"<<endl;
cin>>i;
switch(i)
{
case 1:q = o * k;cout<<q<<endl;break;
case 2:q = o + k;cout<<q<<endl;break;
case 3:q = o - k;cout<<q<<endl;break;
default: cout<<"Incorect input"<<endl;break;
}
system("pause");
return 0;
}
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.05.2011, 00:54
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как переделать friend-перегрузки ввода/вывода в метод класса? (C++):

Как выставить failbit внутри тела перегрузки операторов ввода/вывода - C++
Доброй ночи всем! Есть вот такой код main: for(Sales_item item; std::cin &gt;&gt; item; std::cout &lt;&lt; item &lt;&lt; std::endl); И такая...

Функции для ввода/вывода массивов и матриц с помощью шаблонов и перегрузки - C++
#include &lt;iostream&gt; #include &lt;conio.h&gt; using namespace std; template&lt;class T&gt; int mass(T mas, T iSize = sizeof(mas) /...

матрицы диструктор с динамической памятью, методы get и set, перегрузки ввода/вывода, обстрактный класс - вир - C++
Нужно написать любую программу в которой используются: матрицы диструктор с динамической памятью, методы get и set, перегрузки...

Friend-функции перегрузки оператора - C++
Всем доброго времени суток =) У меня есть следующий код заголовочного файла: enum month {jan = 1, feb, mar, apr, may, jun, jul, aug, sep,...

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

Переделать потоки ввода-вывода на prinf и scanf - C++
#include &lt;iostream.h&gt; #include &lt;conio.h&gt; #include &lt;stdlib.h&gt; int x,y,i,j,n1,m1,n2,m2,z; void cret(void) { cout&lt;&lt;&quot;\nVvedit...

3
Maxim Prishchepa
Эксперт С++
1922 / 1034 / 74
Регистрация: 29.03.2010
Сообщений: 3,167
07.05.2011, 00:56 #2
что имеется ввиду под
Цитата Сообщение от Omenjke Посмотреть сообщение
шаблонить френдовые перегрузки
и
Цитата Сообщение от Omenjke Посмотреть сообщение
как переделать френдовые перегрузки ввода\вывода в метод класса?
это какие-то новые термины? я до такой степени отстал от программирования? :-))

Добавлено через 1 минуту
:-))) это называется шаблонный класс и шаблонные методы
1
Omenjke
Сообщений: n/a
07.05.2011, 01:04 #3
ну я еще в терминах не сильно силен.
mansp
18 / 18 / 0
Регистрация: 07.11.2010
Сообщений: 136
07.05.2011, 09:38 #4
тоже как то раз запарился с этим...
я делал так для класа очередь
в классе обьявил
C++
1
2
template<typename Type> friend ostream &operator<<(ostream &s, const Queue<Type>& obj);
    template<typename Type> friend istream &operator >>(istream &s, Queue<Type>& obj);
реализация
C++
1
2
3
4
template <typename Type> ostream& operator <<(ostream &s, const Queue<Type>& obj)
...........................................
template <typename Type> istream &operator>>(istream &s,  Queue<Type>& obj)
..........................................
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.05.2011, 09:38
Привет! Вот еще темы с ответами:

Переделать, чтобы в программе использовалась функция ввода - вывода:) - C++
#include &quot;stdafx.h&quot; #include &lt;stdlib.h&gt; #include &lt;iostream&gt; #include &lt;string.h&gt; using namespace std; void main() { const...

Как объявить friend функцию класса - C++
как это оформить, чтобы работало // ----------&gt; one.h #include &quot;two.h&quot; #ifndef ONE_H_INCLUDED #define ONE_H_INCLUDED #include...

Перегрузка операций ввода/вывода в шаблоне класса - C++
template &lt;typename T&gt; class Vector { private: T * data; int size; public: Vector(int); friend std::istream &amp;...

Надо переделать метод класса. - C++
Есть программа, надо переделать метод класса. Все - в описании. #include &lt;iostream&gt; using namespace std; class Complex { ...


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

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

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