Witamy na forum PC Format Zapraszamy do REJESTRACJI


Użytkownicy przeglądający ten wątek: 1 gości

Pomóżcie z metodami w klasie. C++

#1
Pomóżcie z metodami w klasie. C++
Cześć,
robię klasę matrix (reprezentującą macierz) i mam pewne problemy z niektórymi metodami. Generalnie to nie za bardzo chce działać konstruktor kopiujący, przeciążony operator dodawania oraz przypisania. Moglibyście poradzić coś? Btw- zadeklarowane zmiennie mają być takie jakie są tzn. właśnie tablica ma być dynamiczna no i jednowymiarowa (mam na myśli to, że jednowymiarowa tablica reprezentuje dwuwymiarową)

Kod:
class matrix
{
private:
    int n;
    int m;
    double *tab;
public:
    matrix(int n, int m)
    {
        this->n=n;
        this->m=m;
        tab=new double[n*m];
    }
    matrix(const matrix& T)
    {
        n=T.n;
        m=T.m;
        for(int i=0; i<n;i++)
            for(int j=0; j<n;j++)
                tab[i*n+j]=T.tab[i*n+j];
    }
    double get(int i, int j)    const
    {
        return tab[i*n+j];
    }
    void set(int i, int j, double x) const
    {
        tab[i*n+j]=x;
    }
    void zero()
    {
        for(int i=0; i<n;i++)
            for(int j=0; j<n;j++)
                tab[i*n+j]=0.0;
    }
    matrix operator+(const matrix tab2) const
    {
        assert(n==tab2.n&&m==tab2.m);
        matrix dodane(n,m);
        for(int i=0; i<n;i++)
            for(int j=0; j<n;j++)
                dodane.tab[i*n+j]=tab[i*n+j]+tab2.tab[i*n+j];
        return dodane;
    }
    matrix& operator=(const matrix& T)
    {
        for(int i=0; i<n;i++)
            for(int j=0; j<n;j++)
                T.tab[i*n+j]=tab[i*n+j];
        return *this;
    }

    ~matrix()
    {
        delete[] tab;
        cout << "usuwam tablice\n";
    }
};
Z całego serca życzę Wam działających PeCetów Krzywy
[Obrazek: wqdz690429546a.GIF]Piszę poprawnie po polsku.
LUDZIE!!! Nie denerwujcie mnie argumentacją "nie kupię, bo mi kiedyś padło"
Rejestruj się, klikaj i zarabiaj!
 System operacyjny: windows_seven Przeglądarka: firefox
#2
RE: Pomóżcie z metodami w klasie. C++
1. Operator przypisania jest źle przeładowany.
2. W konstruktorze kopiującym nie przydzielasz pamięci, co jest błędem.
3. Jeśli to nie mają być macierze kwadratowe, to popraw wszystkie pętle.
4. Niektóre funkcje nie powinny być stałe.
Wesoły
 System operacyjny: windows_xp_2003 Przeglądarka: firefox
#3
RE: Pomóżcie z metodami w klasie. C++
1. A mógłbyś zaprezentować na przykładzie jak to ma być? Bo mi to nie wychodziKwaśny
2. Czyli mam dorzucić T.tab=new double[n*m];?
3. Macierze są że tak powiem jednowymiarowe, ale imitują tablicę dwuwymiarową, tzn. jeśli chcę tablicę o wymiarach 5x4 to robię tablicę 20-elementową, gdzie np 6 wyraz jest tak jakby w 1 kolumnie i 2 wierszu. Trochę głupie, ale tak miałem to zrobić.
4. Mam rozumieć get i set odconstować?
Z całego serca życzę Wam działających PeCetów Krzywy
[Obrazek: wqdz690429546a.GIF]Piszę poprawnie po polsku.
LUDZIE!!! Nie denerwujcie mnie argumentacją "nie kupię, bo mi kiedyś padło"
Rejestruj się, klikaj i zarabiaj!
 System operacyjny: windows_seven Przeglądarka: firefox
#4
RE: Pomóżcie z metodami w klasie. C++
1. Wystarczy zamienić stronami.
2. tab=new double[n*m];
3. Chciałem zwrócić uwagę, że w żadnej pętli nie skorzystałeś ze zmiennej m (każda odlicza do n, a co z m?)
4. Tutaj dla wygody warto przeładować operator tablicowy.
 System operacyjny: windows_xp_2003 Przeglądarka: firefox
#5
RE: Pomóżcie z metodami w klasie. C++
1. Mam rozumieć tab[i*n+j]=T.tab[i*n+j]; ?
Czyli jeśli mam 2 obiekty klasy matrix np. Tablica oraz T to wywołując T=Tablica wywołuję de facto metodę od obiektu T która przybiera parametr Tablica?
2. Aha
3. Ups, przy pętli do j miało być j<m oczywiście, moja pomyłka, której nie zauważałem praktycznie cały czas.
4. Chodzi o operator []? Nie mam pojęcia co masz w tym momencie na myśli.
Z całego serca życzę Wam działających PeCetów Krzywy
[Obrazek: wqdz690429546a.GIF]Piszę poprawnie po polsku.
LUDZIE!!! Nie denerwujcie mnie argumentacją "nie kupię, bo mi kiedyś padło"
Rejestruj się, klikaj i zarabiaj!
 System operacyjny: windows_seven Przeglądarka: firefox
#6
RE: Pomóżcie z metodami w klasie. C++
Kod:
matrix tab1(2,2), tab2(3,4);
tab1.operator=(tab2);
Teraz widać? Funkcja operator= powinna składowe obiektu na rzecz którego wywołano funkcję (czyli tab1) zastąpić tymi z obiektu tab2 (a dokładniej: żeby tab1 nie różnił się niczym pod względem tab2).
Poza tym powinieneś dbać o zwalnianie zarezerwowanej pamięci (bo jak na razie to operator= nie jest uniwersalny - działa dla tablic o jednakowych wymiarach; w przeciwnym wypadku istnieje ryzyko pisania po pamięci bądź czytanie poza dozwolonym obszarem).
 System operacyjny: linux_ubuntu Przeglądarka: firefox
Programy: Polecane / Nowe / Inne



Użytkownicy forum szukali:
klasa matrix c++

Podobne wątki (Pomóżcie z metodami w klasie. C++)
Wątek: Autor Odpowiedzi: Wyświetleń: Ostatni post
  JTable - domyślny wygląd zaznaczenia w klasie rozszerzającej DefaultTableCellRenderer jurek2 0 7063 16.02.2016, 00:15
Ostatni post: jurek2
  [Java] Wykorzystanie interfejsu w klasie potomnej Seba_tbg 6 6836 06.11.2015, 20:47
Ostatni post: koneton
  Metoda dodająca ułamki w klasie, problem. Dreamer1x6xX 3 1151 31.03.2015, 22:36
Ostatni post: Dreamer1x6xX

Skocz do:


Wybrane wątki (Pomóżcie z metodami w klasie. C++)
Wątek: Autor Odpowiedzi: Wyświetleń: Ostatni post
  [C#] Program do moderacji czatów gier wiktrom12 0 7404 07.03.2019 15:33
Ostatni post: wiktrom12
  Mój pierwszy projekt - Pomoc rafal12999 1 7865 07.02.2019 22:01
Ostatni post: Szachista
  pomoc projekt scilab piesel18 2 9274 04.02.2019 09:03
Ostatni post: piesel18
  Szkoła Informatyczna Zikinan 1 8131 02.02.2019 17:59
Ostatni post: wojownikhaha
  [Java] Strona z zadaniami do rozwiązania i odpowiedziami rafal12999 2 8861 27.01.2019 13:44
Ostatni post: rafal12999
  kompilacja biblioteki Agui - cmake jurek2 0 8166 10.01.2019 13:12
Ostatni post: jurek2
  Zamiana całego zestawu znaków wg przyporządkowania BarHorab 5 8867 19.12.2018 16:45
Ostatni post: Szachista
  Sumowanie licz excel - problem OxyGenE 2 11536 19.12.2018 16:29
Ostatni post: Szachista
  Jaki kod pod pewne zdarzenia visualbasic 2010 aktywny27 4 9323 07.11.2018 13:41
Ostatni post: Ajgor
Scared Ipad Pro programowanie? NissmoOne 4 10373 06.10.2018 12:22
Ostatni post: NissmoOne
  C# pierwsza pusta komórka Excel DonCorleone 0 9375 21.09.2018 16:58
Ostatni post: DonCorleone
  .bat nie kompresuje plików GIENTY 3 9918 06.09.2018 07:20
Ostatni post: broda99
  problem z programem .bat wiktrom12 4 11128 30.08.2018 08:25
Ostatni post: wiktrom12
  Silnik do gier ZigglerGames 1 9754 23.08.2018 09:03
Ostatni post: Szachista
  Chciałbym zrobić prosty plik exe z jedną funkcją densour 4 10536 09.08.2018 16:24
Ostatni post: Ajgor