Mam problem z klasą macierz. Muszę przygotować na następne zajęcia funkcje operatorowe, ale nie mogę tego wykonać, gdyż nie mogę zdefiniować domyślnego konstruktora. Zanim się do tego zabrałem wszystko działało, ale problem się zaczyna, gdy deklaruje obiekt bez parametrów "C". Nawet jeśli pokombinuje i skompiluje mi program to problem zachodzi, gdy próbuje wykonać działanie "C=A+B". Z tego co zauważyłem problem występuje na tle alokacji danych. Czy ktoś pomoże mi to rozwiązać? Próbowałem się przekopać przez internet, ale nic ciekawego nie znalazłem.
Kod: Zaznacz cały
#include "Klasamacierz.h"
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;
void Klasamacierz:: wypelnij_zerami()
{
int i,j;
for(i=0;i<wiersz;i++)
{
for(j=0;j<kolumna;j++)
{
macierz[i][j]=0;
}
}
}
void Klasamacierz:: wypelnij_jedynkami ()
{
int i,j;
for(i=0;i<wiersz;i++)
{
for(j=0;j<kolumna;j++)
{
macierz[i][j]=1;
}
}
}
void Klasamacierz:: wypelnij_losowo ()
{
int i,j;
for(i=0;i<wiersz;i++)
{
for(j=0;j<kolumna;j++)
{
macierz[i][j]=rand();
}
}
}
void Klasamacierz:: wyswietl ()
{
for(int i=0;i<wiersz;i++)
{
for(int j=0;j<kolumna;j++)
{ cout<<macierz[i][j]<<" ";
}
cout << endl;
}
}
Klasamacierz Klasamacierz::
operator+(const Klasamacierz &b)
{
Klasamacierz suma;
if(wiersz==b.wiersz && kolumna==b.kolumna)
{
for(int i=0;i<wiersz;i++)
{
for(int j=0;j<kolumna;j++)
{
suma.macierz[i][j]=b.macierz[i][j]+macierz[i][j];
}
}
}
else
{
cout << "Dodawanie niemozliwe" << endl;
}
return suma;
}
Klasamacierz::Klasamacierz(void)
{
int **macierz=NULL;
}
Klasamacierz::Klasamacierz(int _wiersz, int _kolumna):wiersz(_wiersz),kolumna(_kolumna){
macierz=new int*[wiersz];
for(int i=0;i<wiersz;i++)
{
macierz[i]=new int[kolumna];
for(int j=0;j<kolumna;j++)
{
macierz[i][j]=0;
}
}
}
Klasamacierz::Klasamacierz(const Klasamacierz &X):wiersz(X.wiersz),kolumna(X.kolumna)
{
macierz=new int*[wiersz];
for(int i=0;i<wiersz;i++)
{
macierz[i]=new int[kolumna];
for(int j=0; j<kolumna;j++)
{
macierz[i][j]=X.macierz[i][j];
}
}
}
Klasamacierz::~Klasamacierz(void)
{
for(int i=0;i<wiersz;i++)
delete []macierz[i];
delete []macierz;
}
Kod: Zaznacz cały
#include<iostream>
#include <cstdlib>
#include <ctime>
#include "Klasamacierz.h"
using namespace std;
int main()
{
srand( time( NULL ) );
int m,n;
cout << "Podaj liczbe wierszy: " << endl;
cin >> m;
cout << "Podaj liczbe kolumn: " << endl;
cin >> n;
Klasamacierz A(m,n);
A.wypelnij_losowo ();
A.wyswietl ();
cout << "Podaj liczbe wierszy: " << endl;
cin >> m;
cout << "Podaj liczbe kolumn: " << endl;
cin >> n;
Klasamacierz B(m,n);
B.wypelnij_losowo();
B.wyswietl();
Klasamacierz C;
system("pause");
return 0;
}