|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Матрицы - перегрузка оператора - operator[][] |
|
C/C++ - Матрицы - перегрузка оператора - operator[][]
|
Пользователь Сообщения: 147 |
Профиль | Отправить PM | Цитировать я на много медленнее это делаю, просто хобби. А без хобби на куда, т.к это одно из составляющих счастья
это не пример конечно, а мое искусство хотелось бы узнать в каком месте я за рычаг потянул? надо было перегрузить operator[][] << >> для матриц. криворукий код: //MAIN.CPP //Перегрузка операций #include <iostream> using std::cin; using std::cout; using std::endl; using std::ostream; using std::istream; #include <iomanip> using std::setw; //Определение класса Matrix class Matrix { friend ostream &operator<< (ostream &, const Matrix &); friend istream &operator>> (istream &, Matrix &); public: Matrix(int, int); ~Matrix(); int &operator[](int); private: int const line; int const column; int *mPtr; }; Matrix::Matrix(int l, int c) :line(l), column(c) { mPtr = new int[line+1][column+1]; } Matrix::~Matrix() { delete [] mPtr; } ostream &operator<< (ostream &output, const Matrix &m) { for(int i = 0; i < m.line; i++) for(int j = 0; j < m.column; j++) output << m[i][j] << endl; return output; } istream &operator>> (istream &input, Matrix &m) { for(int i = 0; i < m.line; i++) for(int j = 0; j < m.column; j++) input >> setw(1) >> m[i][j]; return input; } int &Matrix::operator[][] (int Line, int Column) { return ((Line >= 0 && Column >= 0 && Line < line && Column < column) ? mPtr[Line][Column] : mPtr[0][0]); } int main() { setlocale(LC_ALL, ".1251"); cout << "Введите размер матрицы(строка х столбец)" << endl; int line, column; cin >> line >> column; Matrix matrix(line, column); cout << "Введите значения матрицы:" << endl; cin >> matrix; cout << "Вы ввели: " << endl << matrix; system("pause"); return 0; } 1>------ Построение начато: проект: Упражнение_на_перегрузку_операций, Конфигурация: Debug Win32 ------ 1>Компиляция... 1>main.cpp 1>c:\$p\mvs\{как программировать на с++}\упражнение_на_перегрузку_операций\упражнение_на_перегрузку_операций\main.cpp(35) : error C2540: неконстантное выражение используется в качестве границы массива 1>c:\$p\mvs\{как программировать на с++}\упражнение_на_перегрузку_операций\упражнение_на_перегрузку_операций\main.cpp(35) : error C2440: =: невозможно преобразовать 'int (*)[1]' в 'int *' 1> Типы, на которые указывают указатели, не связаны; для преобразования требуется reinterpret_cast, приведение в стиле С или приведение в стиле функции 1>c:\$p\mvs\{как программировать на с++}\упражнение_на_перегрузку_операций\упражнение_на_перегрузку_операций\main.cpp(45) : error C2059: синтаксическая ошибка: ] 1>c:\$p\mvs\{как программировать на с++}\упражнение_на_перегрузку_операций\упражнение_на_перегрузку_операций\main.cpp(52) : error C2678: бинарный '[': не найден оператор, принимающий левый операнд типа 'const Matrix' (или приемлемое преобразование отсутствует) 1> c:\$p\mvs\{как программировать на с++}\упражнение_на_перегрузку_операций\упражнение_на_перегрузку_операций\main.cpp(25): может быть 'int &Matrix:perator [](int)' 1> при попытке сопоставить список аргументов '(const Matrix, int)' 1>c:\$p\mvs\{как программировать на с++}\упражнение_на_перегрузку_операций\упражнение_на_перегрузку_операций\main.cpp(60) : error C2109: для индекса требуется массив или указатель 1>Журнал построения был сохранен в "file://c:\$p\mvs\{как программировать на с++}\Упражнение_на_перегрузку_операций\Упражнение_на_перегрузку_операций\Debug\BuildLog.htm" 1>Упражнение_на_перегрузку_операций - ошибок 5, предупреждений 0 ========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ========== |
|
Отправлено: 19:32, 29-07-2010 |
Пользователь Сообщения: 147
|
Профиль | Отправить PM | Цитировать не ну работает, только не правильно)
|
Отправлено: 23:48, 31-07-2010 | #11 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 1180
|
Профиль | Отправить PM | Цитировать Откомпилировал, сначала долго удивлялся, но потом вспомнил про оператор ",". Смысл в следующем: все выражения должны приводиться к первому, стоящему перед первой запятой. Результатом оказывается последний (после последней запятой). Например:
здесь получилось что в скомках как раз и стоит оператор ",", поэтому m[a,b] = m[b], И конечно работает неправильно. А чтобы работало правильно, нужно вызывать m[index(a,b)] |
Отправлено: 14:53, 01-08-2010 | #12 |
Будем жить, Маэстро... Сообщения: 6694
|
Профиль | Сайт | Отправить PM | Цитировать |
------- Отправлено: 18:50, 01-08-2010 | #13 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
C/C++ - [решено] Нахождение обратной матрицы методом Гаусса и рассширенной матрицы | D.Y. | Программирование и базы данных | 64 | 06-05-2011 22:59 | |
C/C++ - Перегрузка операторов 'operator []' | ganselo | Программирование и базы данных | 3 | 29-03-2009 14:57 | |
OperaTor | Sharik987 | Хочу все знать | 5 | 04-12-2008 12:37 | |
Основы C++ | Перегрузка operator+ для m_string | Skrip | Программирование и базы данных | 1 | 10-08-2005 13:41 | |
Перегрузка оператора пробел и многое другое. | ivank | Программирование и базы данных | 4 | 15-09-2002 06:47 |
|