Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.08.2011, 13:38   #1
Rekky
Форумчанин
 
Аватар для Rekky
 
Регистрация: 14.01.2009
Сообщений: 312
По умолчанию Класс и динамические двумерные матрицы

Добрый день
вот мой чудо-код
Код:
сlass Matrix 
{
public:
	int size;
	int **Matr;
	Matrix(int isize)
	{
		size = isize;
	        Matr = new int*[size];
		for (int i=0; i< size; i++) Matr[i] = new int[size];
	}
	void Add(int i, int  j, int value)
	{
		Matr[i][j] = value;
	}
	Matrix Plus (Matrix A, Matrix B)
	{
		for (int i=0;i<size;i++)
		{
			for (int j=0;j<size;j++)
			{
				Matr[i][j] = B.Matr[i][j]+A.Matr[i][j];
			}
		}
		return this;
	}
};
ругается: error C2664: 'Matrix::Matrix(int)' : cannot convert parameter 1 from 'Matrix *const ' to 'int'
где return this, если убрать строку то все запускается..но насчет корректности не уверена. правильно ли будет..?!
я вроде и понимаю ошибку. но как сделать правильно не знаю..мне нужно чтобы я в программе основной могла задать любой размер матрицы..вызывать методы сложения и умножения для них..
Никому не поставить нас на колени! Мы лежали и будем лежать!

Последний раз редактировалось Rekky; 22.08.2011 в 13:51.
Rekky вне форума Ответить с цитированием
Старый 22.08.2011, 13:54   #2
artush1984
Форумчанин
 
Аватар для artush1984
 
Регистрация: 27.04.2009
Сообщений: 184
По умолчанию

Цитата:
return this;
Вы возвращаете указатель на матрицу в место самой матрицы

надо return *this;
Hа C я могy пpосто делать ошибки, на C++ я могy их наследовать!

Последний раз редактировалось artush1984; 22.08.2011 в 13:59.
artush1984 вне форума Ответить с цитированием
Старый 22.08.2011, 14:11   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
ругается: error C2664: 'Matrix::Matrix(int)' : cannot convert parameter 1 from 'Matrix *const ' to 'int'
Ты цутьцуть не то показываешь. Не ту ошибку. Ругается он на
Цитата:
2 IntelliSense: не существует подходящего конструктора для преобразования из "Matrix *" в "Matrix"
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 22.08.2011, 14:33   #4
onewho
Форумчанин
 
Регистрация: 29.09.2010
Сообщений: 636
По умолчанию

тогда уж надо возвращать ссылку Matrix& либо создавать временный объект и его возвращать
onewho вне форума Ответить с цитированием
Старый 22.08.2011, 14:36   #5
Rekky
Форумчанин
 
Аватар для Rekky
 
Регистрация: 14.01.2009
Сообщений: 312
По умолчанию

и правда со * работает и вроде даже правильно
Спасибо
Никому не поставить нас на колени! Мы лежали и будем лежать!
Rekky вне форума Ответить с цитированием
Старый 22.08.2011, 14:42   #6
f.hump
C/C++, Asm
Участник клуба
 
Аватар для f.hump
 
Регистрация: 02.03.2010
Сообщений: 1,323
По умолчанию

на мой взгляд, какая-то мрачноватая операция сложения. (что мешает оператор перегрузить?)

но вы это или референс возвращайте
Код:
Matrix & Plus (Matrix A, Matrix B)
или конструктор копирования напишите.

кстати, а что будет если А и В разного размера?

Последний раз редактировалось f.hump; 22.08.2011 в 14:48.
f.hump вне форума Ответить с цитированием
Старый 22.08.2011, 16:14   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
на мой взгляд, какая-то мрачноватая операция сложения.
По-моему вполне норм. Объект вбирающий в себя суммы элементов двух матриц...
Цитата:
а что будет если А и В разного размера?
А вот это уже правильный вопрос )
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 22.08.2011, 16:16   #8
Rekky
Форумчанин
 
Аватар для Rekky
 
Регистрация: 14.01.2009
Сообщений: 312
По умолчанию

должны быть одинакового размера я не стала усложнять себе итак жуткую задачу..
перегруз делала сначала...но тоже были ошибки, переписала так..хоть работает) на перегруз тоже менять не оч хочется
Никому не поставить нас на колени! Мы лежали и будем лежать!
Rekky вне форума Ответить с цитированием
Старый 22.08.2011, 16:32   #9
f.hump
C/C++, Asm
Участник клуба
 
Аватар для f.hump
 
Регистрация: 02.03.2010
Сообщений: 1,323
По умолчанию

Код:
Matrix & Matrix::operator +=(const Matrix & src) {
	for (int i(0);i<size;i++)
		for (int j(0);j<size;j++)

		Matr[i][j] += src.Matr[i][j];

	return *this;
}
Matrix Matrix::operator +(const Matrix & src) const {
	Matrix result(*this);
	
	result += src;
	return result;
}
это если забыть про проверку размера, и нужен конструктор копирования.
f.hump вне форума Ответить с цитированием
Старый 23.08.2011, 12:49   #10
Rekky
Форумчанин
 
Аватар для Rekky
 
Регистрация: 14.01.2009
Сообщений: 312
По умолчанию

f.hump, я не понимаю, чем хуже мой код, и зачем нужен будет конструктор копирования..ни разу с таким не работала
Можете объяснить?)
Никому не поставить нас на колени! Мы лежали и будем лежать!
Rekky вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Динамические двумерные массивы Razdolbam Помощь студентам 0 14.03.2011 15:37
Двумерные массивы (матрицы) Zevsnet Помощь студентам 0 01.12.2010 09:23
динамические матрицы и списки(паскаль) андреич Помощь студентам 1 08.05.2010 21:48
двумерные массивы(матрицы) dunvegan Помощь студентам 4 05.11.2007 14:32