[C++] Problem z wyświtlanie tablicy w klasie


(Jedras121) #1

Witam.

Napisałem program, który dodaje, odejmuje i dzieli macierze. Macierze są zapisane w 3 tablicach dynamicznych jako elementy prywatne. Chciałem stworzyć metodę, która wypisze tablicę podaną w parametrze w main(), ale oczywiście nie mam dostępu do tablic. Jakiś pomysł??


(matiit) #2

Może funkcje zaprzyjaźnione?


([alex]) #3

Może zrób na to specjalną metodę.


(Jedras121) #4

No to jest pomysł tylko wtedy metoda, która wypisuje tablicę nie może być składnikiem tej klasy. Ale zawsze to już coś


(Marcin 110) #5

Jeśli wolisz mieć metodę, możesz przeciążyć operator<


(Jedras121) #6

No tak ta funkcja zaprzyjaźniona mi coś nie pasuje, a na metodę nie mam pomysłu. Jedyne co mi teraz przychodzi do głowy to stworzenie tylu metod wypisujących ile jest tablic, ale to jest bez sensu. A z przeciążeniem operatorów jeszcze nie miałem do czynienia. :oops:

Może podacie jakiś przykład dla takiego kodu

class macierze

{

      private:

              int m; //ilość wierszy

              int n; //ilość kolumn

	           double **A;

              double **B;

      public:

              void wypisz(double **X,int m1,int n1);

}


void macierze::wypisz(double **X,int m1, int n1)

{

	for(int i=0;i
        {

        for(int j=0;j
        cout<
        cout<
        }

}

Chodzi o to, że jeśli wywołam metodę w main() pod X podstawiając tablicę do wypisania czyli A lub B, a pod m1 i n1 ile wierszy i kolumn chce wypisać.

Pewnie to dla was dosyć banalne, ale będę wdzięczny z pomoc.


(Sawyer47) #7

Jeśli X ma być jedną z macierzy A, B to wystarczy przekazać dodatkowy parametr do metody, np. int ktora_macierz;

macierze var;

var.wypisz(1); // i wypisuje var.A lub wypisz(2) i wypisuje var.B

Czemu chcesz przekazywać wewnętrzne dane (prywatne) do publicznej metody i wywoływać ją w main? To by wskazywało, że nie przemyślałeś swojego kodu.


(Jedras121) #8

No w zasadzie mogę zrobić tak radzisz nr47 Dzięki za pomoc (chyba, że ktoś ma jakieś inne wykonanie to chętnie przeczytam)


([alex]) #9

Albo metoda albo operator << nie da się go zrobić jako metodę.

Nie rozumiem czemu nie rozdzielisz macierzy na osobne klasy, tak aby potem operacje na macierzach wykonywać za pomocą operatorów.

Jeżeli masz tylko jedną macierz w klasie to:

class macierz{

(Marcin 110) #10

Racja, nie da się :oops:

Jeśli skorzystasz z rozwiązania alex a, klasę Macierze możesz już łatwo zaimplementować, np. powiedzmy trzymając vector i implementując

const Macierz & operator[] (int index) const;

Wtedy wypisywanie konkretnej macierzy wygląda tak:

Macierze macierze;

// ...

cout << macierze[0];

Musiałbyś dopisać odpowiednie const'y do kodu alex a. Albo jeśli klasa Macierze nic więcej nie robi, to:

typedef vector Macierze;