zdravim, mam problem s objektama - snazim se vytvorit si komplexni vypocetni knihovnu pro veskerou praci s maticema a vektorama - nejprve jsem udelal tridu vektor, ktera by mela byt sobestacna a plne funkcni - je v priloze. Pak jsem zacal delat tridu matice, kterou mam udelanou jako pole objektu tridy vektor (radky matice), tady ale nastaly problemy pri spousteni programu. Patrne to souvisi s nejakou alokaci tech poli nebo dealokaci, nevim. Normalne to jde zkompilovat ale kdyz to spustim, tak to vyhazuje vyjimku:
Vektor.h - v priloze
Matrix.h:
#ifndef _MATRIX_H_
#define _MATRIX_H_
#include <iostream>
using namespace std;
class Matrix {
int rows;
int cols;
Vector * space;
public:
Matrix(): rows(0), cols(0) {}
Matrix(int m, int n);
Matrix(int m, int n, float x);
virtual ~Matrix();
Vector & operator [](int i);
friend ostream& operator<<(ostream& o, Matrix& m) {
for (int i = 0; i < m.rows; i++) {
o << m.space[i] << endl;
}
o << endl;
return o;
}
Matrix & operator+(const Matrix& m) const;
Matrix operator-(const Matrix& m);
};
Matrix::Matrix(int m, int n) {
rows = m;
cols = n;
space = new Vector[rows*cols];
Vector Zero(cols);
for(int i=0; i<rows; i++) space[i]=Zero;
}
Matrix::Matrix(int m, int n, float x) {
rows = m;
cols = n;
space = new Vector[rows*cols];
Vector X(cols,x);
for(int i=0; i<rows; i++) space[i]=X;
}
Matrix::~Matrix() {
if(space!=0) delete [] space;
}
Vector & Matrix::operator [] (int i) {
return space[i];
}
Matrix & Matrix::operator+(const Matrix& m) const {
Matrix temp(*this);
for(int i=0; i<rows; i++) temp.space[i]=space[i]+m.space[i];
return temp;
}
Matrix Matrix::operator-(const Matrix& m) {
Matrix temp(*this);
for(int i=0; i<rows; i++) temp.space[i]=space[i]-m.space[i];
return temp;
}
#endif
Main.cpp - tady si jenom testuju funkcnost jednotlivych funkci a operatoru:
#include <iostream>
#include <cstdlib>
#include "vector.h"
#include "matrix.h"
using namespace std;
int main(int argc, char *argv[])
{
Vector x(3,1);
cout << x << endl << endl;
Matrix A(5,4,5);
A[1]=Vector(4,0);
A[1][1]=1;
cout << A;
Matrix B(5,4,2);
cout << B;
Vector a(4);
a=A[0]+B[1];
cout << a << endl << endl;
Matrix C(5,4);
C=A+B;
cout << C;
system("PAUSE");
return EXIT_SUCCESS;
}
Po spusteni by to melo vypsat:
(1,1,1)
(5,5,5,5)
(0,1,0,0)
(5,5,5,5)
(5,5,5,5)
(5,5,5,5)
(2,2,2,2)
(2,2,2,2)
(2,2,2,2)
(2,2,2,2)
(2,2,2,2)
(7,7,7,7)
(7,7,7,7)
(2,3,2,2)
(7,7,7,7)
(7,7,7,7)
(7,7,7,7)
Patrne jde o nejakou jednoduchou chybu, ale nevim si s tim uz dlouho rady. Ta trida Matrix je samozrejme teprve rozdelana, zatim jsem si pretizil operatory + a -. Testuju na VS2005.
Predem diky moc. Honza