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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.82
Vlad1993
7 / 3 / 1
Регистрация: 08.08.2012
Сообщений: 63
Завершенные тесты: 3
#1

Перегрузка ввода и вывода в классе матриц - C++

25.11.2012, 02:03. Просмотров 1610. Ответов 2
Метки нет (Все метки)

Пишу класс матриц, перегрузил ввод и вывод, ввод почему-то не работает.
Вот код

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
#include<iostream>
#include<vector>
 
using namespace std;
 
class Matrix{
    public:
        Matrix operator+(Matrix);
        Matrix operator-(Matrix);
        friend ostream& operator<<(ostream &out,Matrix x);
        friend istream& operator>>(istream &in,Matrix x);
private:
        vector< vector<int> > arr;
        int n,m;
};
 
ostream& operator<<(ostream &out,Matrix x){
    for(int i=0;i<x.n;i++){
        for(int j=0;j<x.m;j++)
            out<<x.arr[i][j]<<" ";
        out<<endl;
    }
    out<<x.m<<" "<<x.n;
return out;
}
 
istream& operator>>(istream &in,Matrix x){
    in>>x.n;
    in>>x.m;
    int a;
    for(int i=0;i<x.n;i++){
        vector<int> row;
        for(int j=0;j<x.m;j++){
            in>>a;
            row.push_back(a);
        }
        x.arr.push_back(row);
    }
return in;
}
 
Matrix Matrix::operator+(Matrix a){
    Matrix tmp;
    for(int i=0;i<arr.size();i++){
        vector<int> row;
        for(int j=0;j<arr[i].size();j++)
            row.push_back(arr[i][j]+a.arr[i][j]);
        tmp.arr.push_back(row);
    }
return tmp;
}
 
Matrix Matrix::operator-(Matrix a){
    Matrix tmp;
    for(int i=0;i<arr.size();i++){
        vector<int> row;
        for(int j=0;j<arr[i].size();j++)
            row.push_back(arr[i][j]-a.arr[i][j]);
        tmp.arr.push_back(row);
    }
return tmp;
}
 
int main(void){
    Matrix a;
    cin>>a;         
    cout<<a;
    system("Pause");
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.11.2012, 02:03
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Перегрузка ввода и вывода в классе матриц (C++):

Перегрузка операторов ввода и вывода из потока в шаблонном классе - C++
Доброго времени суток. Пишу свой вектор. В нём надо перегрузить вышеназванные операторы. Vector.h class Vector { // ... ...

Ошибка в классе матриц (перегрузка операторов) - C++
уважаемые форумчане, помогите, пожалуйста, найти ошибку в коде пишу класс на матрицы довольно объемный по содержанию, во всяком случае...

Перегрузка дружественного оператора вывода в шаблонном классе - C++
Здравствуйте! Я не могу понять как мне правильно сделать перегрузку оператора вывода ввывода в шаблонном классе ...

Перегрузка вывода и ввода - C++
Здравствуйте прошу помочь ,написал программу в ней нужно перегрузить вывод и ввод ,как это можно осуществить??пробовал перегружать...

Перегрузка операторов ввода/вывода - C++
Вроде сделал, но не работает перегрузка оператора ввода. #include &quot;stdafx.h&quot; #include &lt;iostream&gt; using namespace std; ...

Перегрузка операторов ввода/вывода. - C++
Класс комплексных чисел. Нужно чтобы программа выводила и вводила в таком виде (функции in и out): #include &lt;iostream&gt; #include...

2
Kuzia domovenok
1891 / 1746 / 118
Регистрация: 25.03.2012
Сообщений: 5,926
Записей в блоге: 1
25.11.2012, 02:43 #2
Цитата Сообщение от Vlad1993 Посмотреть сообщение
friend istream& operator>>(istream &in,Matrix x);
как же ввод будет работать, если ты оператору аргумент передаёшь по значению? Или ты не знаешь, что аргументы передаваемые в функцию не изменяются вне её?
Пример:
C++
1
2
3
4
5
6
7
8
void Read(int x){
std::cin>>x;
}
int main(){
int number=5;//number присвоено 5
Read(number);//вводим с клавы 10
std::cout<<number;//number так и осталось 5
}
Твой случай абсолютно аналогичен. Для того, чтоб это исправить в С++ введены ссылки. В Си до этого использовались указатели вот так:
C
1
2
3
4
5
6
7
8
9
void Read(int* x){
scanf("%d", x)
}
int main(){
int number=5;//number присвоено 5
Read(&number);//вводим с клавы 10
printf("%d", number);//number успешно присвоилось 10
return 0;
}
Добавлено через 5 минут
Но, для удобства записи без лишних амперсантов и звёздочек, особенно при перегрузке операторов >>
В Си++ ввели понятие ссылка. Она определяется знаком &
C++
1
2
3
4
5
6
7
8
9
void Read(int &x){
std::cin>>x;
}
int main(){
int number=5;//number присвоено 5
Read(number);//вводим с клавы 10
printf("%d", number);//number успешно присвоилось 10
return 0;
}
C учётом сказанного, твои операторы должны быть объявлены так:
C++
1
friend istream& operator>>(istream &in,Matrix &x);//Обрати внимание, x теперь ссылка!
1
alsav22
5421 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
25.11.2012, 02:55 #3
C++
1
2
friend ostream& operator<<(ostream &out, Matrix &x);
friend istream& operator>>(istream &in, Matrix &x);
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.11.2012, 02:55
Привет! Вот еще темы с ответами:

Перегрузка оператора ввода ,вывода - C++
Вообщем проблема такая есть класс в нем приват поля и перегружены 2 дружественных оператора ввода вывода, все хорошо, но дружественный...

Перегрузка операторов ввода вывода - C++
ребята болит уже голова)) main.cpp #include &quot;myStr.h&quot; int main() { myStr myS(&quot;ok&quot;); cout&lt;&lt;myS&lt;&lt;endl;//надо чтоб...

Перегрузка ввода/вывода в/из потока - C++
Никогда потоками не пользовался, поэтому не знаю. Как перегрузить для ввода из потока оператор operator &gt;&gt;? Как перегрузить для вывода в...

Перегрузка операции ввода/вывода - C++
В лабораторной говорится: &quot;Перегрузить операции ввода и вывода 2 способами: внутренним и внешним&quot;. Что такое внешним я представляю, а...


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

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

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