Предыдущий пост -
Следующий пост -

Класс Matrix.

Рубрика: C++, Дата: 25 March, 2013, Автор:
Tags:

Определите класс Matrix, аналогичный Mat4, но с размерами задаваемыми конструктором Matrix::Matrix(int,int).

Cсылка на класс Mat4: http://www.kselax.ru/2013/03/klass-mat4/.

Чото я подустал блин пара в парашу сходить 🙂 . Ладно как же быть? Что же нам делать? Нужно подумать. Мы наверно для начала построим Matrix на основе класса Vector ссылочка на класс: http://www.kselax.ru/2013/03/klass-vector/. Класс будет такой же самый как Mat4 на 4 элемента я короче копию сделаю просто его подредактирую. Когда ето все будет готово будет следующий этап. Мы уже введем конструктор Matrix::Matrix(int,int) и все – это самый простой будет этап. Ну что ж поехали.

Сделал я довольно таки быстро. Вот код. Файл Matrix.h:

//ob69vlenie Matrix
#ifndef Matrix_H
#define Matrix_H

#include <vector>
using std::vector;

#include "Vector.cpp"

class Matrix
{
public:
	vector<Vector> mVec;//predctavlenie
	int sStr;//kolichectvo ctrok v matrice
	int sCtol;//kolichectvo ctolbcov
	
	//konctryktor po ymolchaniyu
	Matrix();
	
	//konctryktor kopii
	Matrix(const Matrix& a);
	
	//konctryktor preobrazovani9 dl9 raznogo razmera
	Matrix(int, int);
	
	//pechat6
	void print();
	
	//vozvrachaet cculky na ob6ekt macciva a povtornui vuzov proicxodit dl9 Vector;
	Vector& operator[](int i);
	
	//vozvrachaet cculky na ob6ekt macciva a povtornui vuzov proicxodit dl9 Vector;
	Vector operator[](int i)const;

};

Matrix operator+(const Matrix a, const Matrix b);
Matrix operator-(const Matrix a, const Matrix b);
Matrix operator*(const Matrix a, const float b);

#endif

файл Matrix.cpp:

//opredelenie Matrix

#include "Matrix.h"

//konctryktor po ymolchaniyu
Matrix::Matrix()
:sStr(4),sCtol(4)
{
	Vector a(sCtol);
	for(int i=0;i<sStr;i++)
	{
		mVec.push_back(a);
	}
}

//konctryktor kopii
Matrix::Matrix(const Matrix& a)
:sStr(a.sStr),sCtol(a.sCtol)
{
	for(int i=0;i<sStr;i++)
	{
		mVec.push_back(a.mVec[i]);
	}
}

//konctryktor preobrazovani9 dl9 raznogo razmera
Matrix::Matrix(int c, int b)
:sStr(c),sCtol(b)
{
	Vector a(sCtol);
	for(int i=0;i<sStr;i++)
	{
		mVec.push_back(a);
	}
}

//pechat6
void Matrix::print()
{
	
	for(int i=0;i<sStr;i++)
	{
		for(int j=0;j<sCtol;j++)
		{
			cout <<mVec[i][j]<<' ';
		}
		cout <<endl;
	}
}

//vozvrachaet cculky na ob6ekt macciva a povtornui vuzov proicxodit dl9 Vector;
Vector& Matrix::operator[](int i)
{
	return mVec[i];
}

//vozvrachaet cculky na ob6ekt macciva a povtornui vuzov proicxodit dl9 Vector;
Vector Matrix::operator[](int i)const
{
	return mVec[i];
}



Matrix operator+(const Matrix a, const Matrix b)
{
	Matrix c;
	for(int i=0;i<a.sStr;i++)
	{
		c[i]=a[i]+b[i];
	}
	
	return c;
}

Matrix operator-(const Matrix a, const Matrix b)
{
	Matrix c;
	for(int i=0;i<a.sStr;i++)
	{
		c[i]=a[i]-b[i];
	}
	
	return c;
}

Matrix operator*(const Matrix a, const float b)
{
	Matrix c;
	for(int i=0;i<a.sStr;i++)
	{
		for(int j=0;j<4;j++)
		{
			c[i][j]=a[i][j]*b;
		}
	}
	
	return c;
}

файл main.cpp:

//klacc Matrix
#include <iostream>
using std::cout;
using std::endl;

#include "Matrix.cpp"

int main()
{
	Matrix a;
	a.print();
	Matrix b(7,8);
	cout <<endl;
	b.print();
	
	return 0;
}

Все как вы видите я использую не раздельную компиляцию, а просто подключаю #include “Matrix.cpp” мне просто так удобнее тестить, когда уже оттестиш программу тогда уже можно подключить как положено и выполнить раздельную компиляцию. Мне просто так удобнее я делаю так, а вы как хотите, можете сразу делать раздельную компиляцию.

Решаем следующую.

rss