Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Матрицы - перегрузка оператора - operator[][]

Ответить
Настройки темы
C/C++ - Матрицы - перегрузка оператора - operator[][]

Аватара для котвася

Пользователь


Сообщения: 147
Благодарности: 5

Профиль | Отправить 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
Благодарности: 5

Профиль | Отправить PM | Цитировать


не ну работает, только не правильно)

Отправлено: 23:48, 31-07-2010 | #11



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.

pva pva вне форума

Аватара для pva

Ветеран


Сообщения: 1180
Благодарности: 279

Профиль | Отправить PM | Цитировать


Откомпилировал, сначала долго удивлялся, но потом вспомнил про оператор ",". Смысл в следующем: все выражения должны приводиться к первому, стоящему перед первой запятой. Результатом оказывается последний (после последней запятой). Например:
Код: Выделить весь код
int i = (1,2,3);
// i = 3;
здесь получилось что в скомках как раз и стоит оператор ",", поэтому m[a,b] = m[b], И конечно работает неправильно. А чтобы работало правильно, нужно вызывать m[index(a,b)]

Отправлено: 14:53, 01-08-2010 | #12


Аватара для Drongo

Будем жить, Маэстро...


Сообщения: 6694
Благодарности: 1393

Профиль | Сайт | Отправить PM | Цитировать


Цитата pva:
я думал в c/c++ нет конструкции [a, b] (т.е. вызова оператора [] с двумя аргументами) »
А я это помнил.
Цитата Drongo:
котвася, Это надо кажется перегружать () - operator()
Тогда будет формироватья matrix(row, column); »

-------
Правильная постановка вопроса свидетельствует о некотором знакомстве с делом.
3нание бывает двух видов. Мы сами знаем предмет — или же знаем, где найти о нём сведения.
[Quick Killer 3.0 Final [OSZone.net]] | [Quick Killer 3.0 Final [SafeZone.cc]] | [Парсер логов Gmer] | [Парсер логов AVZ]

http://tools.oszone.net/Drongo/Userbar/SafeZone_cc.gif


Отправлено: 18:50, 01-08-2010 | #13



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Матрицы - перегрузка оператора - operator[][]

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
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




 
Переход