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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.10.2012, 01:48   #1
Jess Mailes
Пользователь
 
Регистрация: 06.04.2012
Сообщений: 10
По умолчанию Матрица, перегрузка двойного индексирования [][] с/c++

Препод просит перегрузить операцию двойные скобки для того, чтобы обращаться к элементам по индексам но без точки, я перегрузила, но выдает ошибки, помогите, проверяла на перегрузке оператора *=, вот часть кода :


Код:
#include <stdio.h>
#include<stdlib.h>



class Matrix
{
private:
	int n;
	int m;
	float **a;
public:/*
	class Mline
	{
	private:
		int m;
		float *b;
	public:
		Mline(int m1, float *b1)
		{
			m=m1;
			b=b1;
		}
		float &operator [](int j)
		{
			if(j<0 || j>=m)
				exit(2);
			return b[j];
		}
	};
	Mline &operator [](int i)
	{
		if(i<0 || i>=m)
			exit(2);
		return Mline(m.a[i]);
	}
	float &operator()(int i, int j)
	{
		if((i<0 ||i>=n) || (j<0 || j>=m))
			exit(2);
		return *(a[i]+j);
	}*/
	Matrix(int n1=3, int m1=3)
	{
		n=n1, m=m1;
		a=new float *[n];
		for (int i=0; i<n; i++)
			a[i]=new float[m];
		for(int i = 0; i < n; i++)
			for(int j = 0; j < m; j++)
				a[i][j] = 0; 
	}
	Matrix (const Matrix &M)//конструктор копирования
	{
		n = M.n; m = M.m;
		a = new float *[n];
		for(int i = 0; i < n; i++) 
			a[i] = new float[m];
		for(int i = 0; i < n; i++)
			for(int j = 0; j < m; j++)
				a[i][j] = M.a[i][j]; 
	}
	~Matrix()
	{
		for(int i=0; i<n; i++)
			delete[]a[i];
		delete[]a;
	}
	Matrix &operator = (const Matrix &y)// перегрузка =
	{
		if(y.n>n || y.m >m)
		{
			for(int i=0; i<n; i++)
				delete[]a[i];
			delete[]a;
			n=y.n, m=y.m;
			a=new float *[n];
			for (int i=0; i<n; i++)
			a[i]=new float[m];
		}
		for(int i = 0; i < n; i++)
			for(int j = 0; j < m; j++)
				a[i][j] = y.a[i][j];
	}
	Matrix &operator *=(const Matrix &b)   //умножение матриц перегрузка
	{
		Matrix c(n,b.m);
		for(int i = 0; i < n; i++)
			for(int j = 0; j < m; j++)
				c.a[i][j] = 0;
		if(n!=b.m)
			exit(2);
		int k=0, z=0, l=0;
		for(int i=0; i<n; i++)
			for(int j=0; j<m; j++)
			{
				while(k<n && z<m)
				{
					l=a[i][k]*b[z][j];
					k++;
					z++;
					c[i][j]=c[i][j]+l;
				}
				k=0, z=0, l=0;
			}
		*this=c;
		return *this;
	}
	void Vvod ()
	{
	//printf("%d %d\n", n, m);
	for (int i=0; i<n; i++)
		for (int j=0; j<m; j++)
		
			scanf("%f",&a[i][j]);
	}
	void Print ()
	{
		for(int i=0; i<n; i++)
		{
			for(int j=0; j<m; j++)
				printf("%0.2f ",a[i][j]); 
			printf("\n");
		}
	}
};
int main()
{
	Matrix a;
	Matrix b;
	a.Vvod();
	b.Vvod();
	a*=b;
	a.Print();
	return 0;
}


Закоменченая часть и есть то, в чем прошу помощи

Последний раз редактировалось Stilet; 10.10.2012 в 08:12.
Jess Mailes вне форума Ответить с цитированием
Старый 10.10.2012, 13:09   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

Список ошибок - в студию.
Вы возвращаете ссылку на Mline объкт созданный в стеке.
Конструктор Mline требует двух параметров, у вас только один.
waleri вне форума Ответить с цитированием
Старый 10.10.2012, 14:11   #3
Jess Mailes
Пользователь
 
Регистрация: 06.04.2012
Сообщений: 10
По умолчанию

Во-первых у меня ubuntu,во-вторых, я знаю, все ошибки, которые мне выдает этот момент программы, и заметьте если, где требуется поставить ".a" код заработает идеально. У меня выдает ошибки :

1.cpp: В функции-члене «Matrix::Mline& Matrix:perator[](int)»:
1.cpp:35:18: ошибка: запрос элемента «a» в «((Matrix*)this)->Matrix::m», имеющего не классовый тип «int»
1.cpp: В функции-члене «Matrix& Matrix:perator*=(const Matrix&)»:
1.cpp:99:19: ошибка: passing «const Matrix» as «this» argument of «Matrix::Mline& Matrix:perator[](int)» discards qualifiers [-fpermissive]

и я обратилась сюда, только потому, что не знаю как исправить это ошибки, а не узнать где я накосячила.
Jess Mailes вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перегрузка операторов, Класс Матрица 5Hur1K Помощь студентам 0 20.02.2012 23:14
запрет двойного меню IliaIT Общие вопросы Delphi 4 10.02.2012 13:50
Матрица. Перегрузка операторов soirkar Общие вопросы C/C++ 17 19.01.2012 09:27
Динамическая матрица через класс и перегрузка artyom-d Общие вопросы C/C++ 0 03.04.2010 14:36
Блокировка двойного клика tutor JavaScript, Ajax 1 18.01.2010 22:47