Определите класс 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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
//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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 |
//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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
//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» мне просто так удобнее тестить, когда уже оттестиш программу тогда уже можно подключить как положено и выполнить раздельную компиляцию. Мне просто так удобнее я делаю так, а вы как хотите, можете сразу делать раздельную компиляцию.
Решаем следующую.