|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
03.06.2011, 20:51 | #1 |
Регистрация: 17.05.2011
Сообщений: 4
|
C++, переопределение ввода-вывода
Решите, пожалуйста, если не трудно)
Переопределить операции << и >> для ввода-вывода матриц размерностью m*n, где m и n кон-станты. Матрица хранится в классе. |
03.06.2011, 21:30 | #2 |
Пользователь
Регистрация: 20.04.2009
Сообщений: 58
|
Код:
|
03.06.2011, 21:31 | #3 | |
C++
Форумчанин
Регистрация: 27.03.2011
Сообщений: 803
|
Цитата:
Ищете информацию по C++?
cplusplus.com |
|
03.06.2011, 22:13 | #4 |
Регистрация: 06.04.2011
Сообщений: 8
|
О, ребята, объясните, пожалуйста, в чем тут смысл работы со ссылками, подробнее. А то перегружать эти операторы-то я умею, но никогда не мог понять, причем там ссылки. Ведь ссылки обычно используются методами для изменения содержимого переданных им переменных и позволяют "возвращать"(программно, конечно, изменять) несколько переменных, в отличие от оператора return. Я так понимал, что они для этого используются. А для чего здесь возвращать ссылку на объект ostream(istream), если он все равно в итоге один? Неужели если оператор вернет объект, цепочка не построится? "cout << Name << Surname;" - "cout << Name" вернет ostream, к которому в свою очередь применяется следующий "<<", который применяется уже к Surname и к возвращенному результату. Подобно тому, как оператор "+" выстраивает цепочки для, например, целых чисел: a + b + c ...
или он возвращает все-таки объект? но ведь тип возвращаемого значения - ссылка на объект, а не объект. |
03.06.2011, 22:36 | #5 | |
Пользователь
Регистрация: 20.04.2009
Сообщений: 58
|
Цитата:
|
|
03.06.2011, 23:32 | #6 |
Регистрация: 06.04.2011
Сообщений: 8
|
Спасибо за ответ, но я не совсем понимаю, в таком случае, суть ссылки. Я всегда думал, что это на машинном уровне есть адрес некой переменной. Ну вот я сейчас напишу небольшую функцию с комментариями, которые будут содержать мои предположения по поводу того, что же на самом деле в компьютере происходит, а вы поправите меня, ладно?
Код:
я строю все домыслы на предположении, что ссылки суть значения указателей, только разименовываются без "*". может, это неправда, и оно как-то по-другому реализуется. |
04.06.2011, 11:44 | #7 | |||
Пользователь
Регистрация: 20.04.2009
Сообщений: 58
|
Да, если вдаваться в детали, то ссылка - это константный указатель (можно менять значение переменной, но нельзя менять ее адрес):
Код:
Цитата:
2. Ничего функция не разыменовывала. Ссылка это уже "разыменованный указатель", т.е. та же самая переменная на которую она ссылается, только с другим именем. Цитата:
cout << a << b; Цитата:
Мой вам совет - обратиться к дополнительной литературе и почитать о ссылках. Последний раз редактировалось N1KeL; 04.06.2011 в 11:46. |
|||
15.06.2011, 19:44 | #8 | ||
Регистрация: 17.05.2011
Сообщений: 4
|
вот на что хватило фантазии:
//Unit1.cpp Цитата:
Цитата:
|
||
16.06.2011, 04:18 | #9 |
Пользователь
Регистрация: 01.11.2010
Сообщений: 75
|
Дружественная фунеция описывается вне класса, в самом классе только прототип функции с ключевым словом friend. Также посмотри ещё раз на свой конструктор, что-то с ним не то. И допиши деструктор, иначе память будет засоряться.
Вот примерно так должно выглядить: #ifndef _File1_H #define _File1_H #include "iostream.h" const int m=3; const int n=3; class matrix { int **mat; public: matrix(int ,int ); friend ostream& operator<<(ostream& out,const matrix &a); friend istream& operator>>(istream& in, matrix &a); ~matrix() { //опиши здесь деструктор } }; ostream& operator<<(ostream& out,const matrix&a); { for(int i = 0; i < m; i++) for(int j = 0; j < n; j++) out <<a.mat[i][j]<< " "; cout << endl; return out; } istream& operator >>(istream&in,matrix&a); { for(int i = 0; i < m; i++) for(int j = 0; j < n; j++) in>>(int)a.mat[i][j]; cout << endl; return in; } matrix::matrix(int m,int n) { *mat = new int*[m*sizeof(int)]; for (int z=0; z<n; z++) mat[z] = new int[n*sizeof(int)]; } #endif |
16.06.2011, 16:27 | #10 |
Регистрация: 17.05.2011
Сообщений: 4
|
Все, спасибо. Проблема решена, тему можно закрывать)
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Операторы ввода и вывода | wsws123 | Паскаль, Turbo Pascal, PascalABC.NET | 2 | 04.01.2011 18:12 |
переопределение ввода и вывода в С++ | blackbanny | Помощь студентам | 12 | 03.05.2010 13:08 |
Перенаправление ввода/вывода | dudeboy | Win Api | 0 | 16.11.2009 11:36 |
JavaScript поля ввода/вывода | Doublefaced | Помощь студентам | 2 | 03.06.2009 01:36 |
система ввода вывода | StudentPolitech | Общие вопросы C/C++ | 3 | 02.04.2009 22:22 |