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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.82
Vlad1993
7 / 3 / 1
Регистрация: 08.08.2012
Сообщений: 62
Завершенные тесты: 3
25.11.2012, 02:03     Перегрузка ввода и вывода в классе матриц #1
Пишу класс матриц, перегрузил ввод и вывод, ввод почему-то не работает.
Вот код

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;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.11.2012, 02:03     Перегрузка ввода и вывода в классе матриц
Посмотрите здесь:

C++ Перегрузка ввода/вывода в/из потока
C++ Перегрузка операторов ввода и вывода
Перегрузка операторов ввода вывода C++
C++ Перегрузка операций ввода/вывода
Перегрузка операторов ввода-вывода C++
C++ Шаблоны перегрузка ввода/вывода
C++ Ошибка в классе матриц (перегрузка операторов)
Перегрузка дружественного оператора вывода в шаблонном классе C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kuzia domovenok
 Аватар для Kuzia domovenok
1882 / 1737 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 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 теперь ссылка!
alsav22
5282 / 4801 / 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);
Yandex
Объявления
25.11.2012, 02:55     Перегрузка ввода и вывода в классе матриц
Ответ Создать тему
Опции темы

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