Wpis z mikrobloga

#programowanie #cpp

Mirki, mam do Was ogromną prośbę.

Uczę się przeciążenia operatorów dodawania/mnożenia etc. dla wektorów (dyn. tab. 1W) i macierzy (dyn. tab. 2W). I mam pewien problem.

Gdy dodaję do siebie macierze, np.:

macierz mac3=mac1+mac2;

To macierz3 jest poprawna, ale 1 i 2 już nie (są identyczne jak 3).

Kod "bazowy" mam na podstawie przeciążeń i metod od wektora, który wcześniej robiłem i działa poprawnie. Kod macierzy pisałem 2x od nowa, przekopiowałem i zmieniałem z wektora, metody dałem na stałe, usuwałem bazowanie na oryginałach (&) itp. ale bezskutecznie.

Screen to ładnie przedstawia (dziwne cout'y w celu znalezienia przyczyny): http://i.imgur.com/RDP2bCM.jpg

Byłby ktoś w stanie pomóc? Ja już chyba ślepy jestem od tego,a potrzebowałbym mieć to naprawione najszybciej jak to możliwe.

Kod: http://pastebin.com/M9C2tFNU

P.S. Teraz zauważyłem, że jak np. pomnożę nowy wektor przez skalar (przeciążenie/metody także mam na podstawie wektora):

macierz mac4 = mac2 * liczba;

To wszystkie pozostałe instancje, mac1,2,3 również mają wartość mac4.

P.S.2. Jeśli mogę prosić, to nie zarzucajcie mi brak w kodzie jakichś wymyślnych, wydajnych funkcji typu z C++14, bo najpierw chciałbym ogarnąć "podstawy" bez dodatkowych rzeczy...

Z góry dziękuję i pozdrawiam :)
  • 6
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@blisher 1 i 2 - w sumie mógłbym. Szczerze sam nie wiem czemu tak piszę. Jak trochę dłużej w programowaniu posiedzę to postaram się pisać po angielsku (array, foo, matrix etc.)) i jakąś notacją (wegierską ( ͡° ͜ʖ ͡°)). Na dobry początek chcę myśleć jak komputer abym sprawniej pisał kod.

3. Takie mam wymogi do stworzenia tego programu - "... Operatory mają wywoływać odpowiednie metody... ". Mimo,
  • Odpowiedz
@Atexor: kopiujesz wskaźniki do każdego wiersza, a nie wartości - więc efektywnie masz 1 zestaw wierszy do którego odwołują się 3 macierze. Jak zmieniasz wartość w którymś wierszy dowolnej macierzy - efekt jest widoczny w tym wierszu w każdej innej.

Ogólnie to polecam używanie tablicy 1wymiarowej o wielkości szerokosc x wysokosc i przeliczanie indeksów "ręcznie" - wtedy nie ma niepotrzebnych wskaźników i odwoływania się do innych miejsc w pamięci -
  • Odpowiedz