paluchr
Świeży Fizyk
Dołączył: 26 Lis 2008
Posty: 19
Przeczytał: 0 tematów
Ostrzeżeń: 0/5
Płeć: Mężczyzna
|
Wysłany: Wto 0:37, 01 Gru 2009 Temat postu: Programy |
|
|
No dobra, ja wiem, że to forum ledwie egzystuje ale to nie znaczy, że tak ważny temat jak języki programowania ma być dziewiczo pusty. Bo na ten przykład ja mam problem trochę z tą klasą macierzy, którą Hania zadała do napisania. Program się kompiluje i ładnie się uruchamia ale gdy trzeba użyć przeciążonego operatora + albo operatora = to wysypuje się pamięć... Gdzie może być błąd ? Czy komuś to działa i czy ten ktoś udostępniłby na forum swój program albo chociaż te dwa operatory ? Operatory wczytywania i wypisywania śmigają mi aż miło a te dwa najważniejsze powodują u mnie ból głowy i zgrzytanie zębami.
Oto pliki :
1) matrix.h
#include <iostream>
using namespace std;
class Matrix{
int Size1, Size2; //Size1 to kolumny a Size2 to wiersze
double **V;
static int DefSize, Counter;
public:
Matrix();
Matrix(int);
Matrix(int, int);
Matrix(const Matrix &);
~Matrix();
Matrix& operator=(const Matrix&);
friend Matrix operator+(const Matrix& , const Matrix& );
friend Matrix operator-(const Matrix& , const Matrix& );
friend ostream& operator<<(ostream& out, const Matrix &);
friend istream& operator>>(istream& in, Matrix & );
};
2) matrix.cpp
#include "matrix.h"
int Matrix::DefSize=3;
int Matrix::Counter=0;
Matrix::Matrix(){}
Matrix::Matrix(int size1){
int i;
if(size1<=0){
Size1=DefSize;
}
else Size1=size1;
Size2=size1;
V=new double *[Size1];
for(i=0; i<Size1; i++)
V[i]=new double [Size2];
Counter++;
}
Matrix::Matrix(int size1, int size2){ //Size1 to kolumny a Size2 to wiersze!
int i;
if(size1<=0){
Size1=DefSize;
}
else Size1=size1;
if(size2<=0){
Size2=DefSize;
}
else Size2=size2;
V=new double *[Size1];
for(i=0; i<Size1; i++)
V[i]=new double [Size2];
Counter++;
}
Matrix::Matrix(const Matrix &tmp){
int i, j;
V=new double *[Size1];
for(i=0; i<Size1; i++)
V[i]=new double [Size2];
for(i=0; i<Size1; i++)
for(j=0; j<Size2; j++)
V[i][j]=tmp.V[i][j];
}
Matrix::~Matrix(){
int i;
for(i=0; i<Size1; i++)
delete [] V[i];
delete [] V;
}
Matrix& Matrix::operator=( const Matrix & tmp ){
int i , j;
if ( this != &tmp )
{
for(i=0; i<Size1; i++)
delete [] V[i];
delete []V;
V = 0;
Size1 = V ? tmp.Size1 : 0;
Size2 = V ? tmp.Size2 : 0;
V=new double *[Size1];
for(i=0; i<Size1; i++)
V[i]=new double [Size2];
for(i=0; i<Size1; i++)
for(j=0; j<Size2; j++)
V[i][j]=tmp.V[i][j];
}
return *this;
}
Matrix operator+( const Matrix& a, const Matrix& b ){
int i, j;
if(a.Size1==b.Size1 && a.Size2==b.Size2){
Matrix sum(a.Size1,a.Size2);
for (i=0; i<sum.Size1; i++ )
for(j=0; j<sum.Size2; j++)
{
if ( j < a.Size2 ) sum.V[i][j] = a.V[i][j];
if ( j < b.Size2 ) sum.V[i][j] += b.V[i][j];
}
return sum;
}
else return 0;
}
Matrix operator-(const Matrix& a, const Matrix& b){
int i, j;
if(a.Size1==b.Size1 && a.Size2==b.Size2){
Matrix dif(a.Size1, a.Size2 );
for (i=0; i<dif.Size1; ++i )
for(j=0; j<dif.Size2; j++)
{
if ( j < a.Size2 ) dif.V[i][j] = a.V[i][j];
if ( j < b.Size2 ) dif.V[i][j] -= b.V[i][j];
}
return dif;
}
else return 0;
}
ostream& operator<<(ostream& out, const Matrix & tmp){
int i, j;
for(i=0; i<tmp.Size1; i++){
for(j=0; j<tmp.Size2; j++)
cout<<tmp.V[i][j]<<" ";
cout<<"\n";
}
return out;
}
istream& operator>>( istream& in, Matrix & tmp ){
int i, j;
for(i=0; i<tmp.Size1; i++)
for(j=0; j<tmp.Size2; j++){
cout<<"a["<<i<<"]["<<j<<"]= ";
in>>tmp.V[i][j];
cout<<"\n";
}
return in;
}
Post został pochwalony 0 razy
|
|