Klasy i macierze

0

Witam,
mam do zrobienia zadanie, które w klasie private zawiera podwojny wskaznik na tablice oraz rozmiar tablicy, public ktory ma konstruktor w ktorym przydzielam dynamicznie pamiec na tablice 3x3, destruktor oraz funkcje ktora wczytuje dane macierzy i funkcje ktora je wypisuje, ale jakoś nie chce działać.

class Macierz {
private:
	int rozmiar;
	float **tab = new float *[rozmiar];
public:
	Macierz() {
		rozmiar = 3;
		*tab = new float[rozmiar];
		tab[rozmiar][rozmiar];
	}
	void wczytaj_dane() {
		cout << "Wprowadz dane do tablicy 3x3:";
		float x;
		for (int i = 0; i < 3; i++) {
			for (int j = 0; j < 3; j++) {
				tab[i][j] = x;
			}
		}
	}
	void wypisz() {
		for (int i = 0; i < 3; i++) {
			for (int j = 0; j < 3; j++) {
				tab[i][j] = i * 3 + j;
				cout << tab[i][j] << " ";
			}
		}
	}
	~Macierz() {
		delete[] tab;
	}
};
int main()
{
	Macierz m1;
	m1.wczytaj_dane();
	m1.wypisz();
}
0

Co nie działa?

1
tomekrx napisał(a):
class Macierz {
private:
	int rozmiar;
	float **tab = new float *[rozmiar];

Nie możesz w tym miejscu jeszcze zdefiniować tablicy, bo to się wiąże ze znajomością jej rozmiaru, a tego jeszcze nie znasz. Możesz ją jedynie zadeklarować. A jak chcesz by Twoja macierz była jedynie 3 elementowa, to zdefiniuj rozmiar jako static const. Zostaw zatem:

static const int rozmiar = 3;
float **tab;

Poprawiony konstruktor:

Macierz() 
{
   tab = new *float[rozmiar];
   fo0r(int i=0; i<rozmiar; i++)
   {
       tab[i] = new float[rozmiar];
   }
}
		for (int i = 0; i < 3; i++) {
			for (int j = 0; j < 3; j++) {
				tab[i][j] = x;
			}
		}
	}

Brak cin >> x

	~Macierz() {
		delete[] tab;
	}

Tu musisz dopisać w pętli usunięcie podtablic, czyli:

~Macierz() 
{ 
   for(int i=0; i<rozmiar; i++)
       delete [] tab[i];
   delete[] tab;
}
0

No właśnie odpala się do momentu wpisywania zmiennych i potem wyskakuje takie coś:

1

Poprawiłem, tylko bez hejtu proszę bo to nie mój kod :P

#include <iostream>

class Macierz {
private:
    int rozmiar;
    float **tab;
public:
    Macierz() {
        rozmiar = 3;
        tab = new float *[rozmiar];
        for(int i=0;i<rozmiar;i++)
            tab[i] = new float[rozmiar];
    }
    void wczytaj_dane() {
        std::cout << "Wprowadz dane do tablicy 3x3:";
        for (int i = 0; i < 3; i++) {
            for (int j = 0; j < 3; j++) {
                std::cin>>tab[i][j];
            }
        }
    }
    void wypisz() {
        for (int i = 0; i < 3; i++) {
            for (int j = 0; j < 3; j++) {
                std::cout << tab[i][j] << " ";
            }
        }
    }
    ~Macierz() {
        for(int i=0;i<rozmiar;i++)
            delete [] tab[i];
        delete [] tab;
    }
};
int main()
{
    Macierz m1;
    m1.wczytaj_dane();
    m1.wypisz();
    return 0;
}
0

A wie ktoś może jak do tego napisać zaprzyjaźnioną funkcje dodająca dwa obiekty?

1 użytkowników online, w tym zalogowanych: 0, gości: 1