Kalkulator Macierzy - uwagi do projektu

0

Witam !
Chciałbym prosić o w miarę dokładny wgląd do mojego projektu i zwrócenie uwagi na jakieś rażące błędy (jestem świadomy, że już niektórych, ale jeszcze ich nie poprawiłem). Oczywiście, jestem początkujący jeśli chodzi o c++ obiektowo. Miałem do wykonania projekt, którego celem było wykorzystanie przeciążeń funkcji, operatorów oraz stworzenie prostych klas. Na razie bez dziedziczenia. Zdecydowałem się na macierze, bo uznałem, ze jest to dobre ćwiczenie, szczególnie na operatory.

Kod --> http://pastebin.com/0DHU8w1J

Z góry dziękuje za wszelkie uwagi.

P.S. W tym miejscu chciałbym się zapytać o lista inicjacyjną w przypadku konstruktora. Bo słyszałem, że warto w ten sposób inicjalizowac wybrane składowe. I w tym miejscu mam pytanie, czy dobrze jest widziane, że część składowych inicjalizuje w tej liście, a część w ciele samego konstruktora ?

5

Trochę tego dużo do sprawdzenia, tu masz to co na szybkiego wypatrzyłam:

  1. brak prywatnej funkcji zajmującej się alokowanie pamięci. Efekt jest taki, że powtarzasz ten kod w każdym konstruktorze.
  2. konstruktor Matrix(const Id_Matrix&) patrząc w kod i co jet napisane w komentarzu, to mam wątpliwości co to właściwie robi. Jeśli chcesz stworzyć macierz jednostkową, to lepiej zrobić do tego metodę statyczną: Matrix Matrix::Identyty(size_t size).
  3. void load_data() const; wiem, że ładujesz dane interaktywnie z konsoli, ale o wiele lepiej robić to taką metodą: void load_data(istream &inputs);
  4. show() niekonsekwentna nazwa, jak miałeś wcześniej load, to teraz powinno być save albo print + to co powyżej daje: void print_data(ostream &output) const.
  5. void show(LU_decision) const dziwna ta metoda. Nie lepiej zrobić metodę: bool getLuMatrixes(Matrix &L, Matrix &U) const i potem skorzystać z show print_data (tak czy siak ten enum jest zbędny)
  6. Matrix multiply(const Matrix &mx1, const Matrix &mx2); to chyba miała być metoda statyczna
  7. Matrix multiply(const Matrix &mx1); brak const na końcu. Lepsza nazawa multipliedBy
  8. Matrix Matrix::exponentation(unsigned int s) lepiej by było poweredTo(unsigned int power) const.
  9. bool lu(); zbędne, patrz punkt 5
  10. Matrix tranpose(); powinno być: Matrix transposed() const; (jeszcze literówka wypatrzona przez sptanPAGE).
  11. operatory +-*, lepiej zrobić nazwane metody a potem ich użyć w tych operatorach (przyjaźń jest wtedy zbędna). Zresztą mnożenie masz już tak zrobione, więc trzeba było z tego skorzystać, zamiast się powtarzać.
  12. operator= skąd pewność, że obie macierze mają ten sam rozmiar?
  13. czasami sprawdzasz poprawność rozmiarów macierzy, a innym razem nie
0

Dziękuje bardzo za pomoc !

Niektórych błędów byłem świadom już wcześniej i zdążyłem sam poprawić, ale niektóre uwagi naprawdę się przydały.

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