Podział kodu na mniejsze pliki

0

Witam,
załóżmy, że mam 2 klasy: Class1 i Class2 i chciałbym np porównywać pewne wartości między nimi np. if( one.getPosition().x < two.getPosition().x). Nie chciałbym, by odbywało się to w mainie, bo przy większych problemach zajmowałoby to dużo miejsca. Czy w "dobrym smaku" jest utworzenie kolejneo pliku (.cpp i.h) zawierające Class1.h i Class2.h w którym bym tylko napisał funkcje porónujące i ją potem załączył do maina? Albo jakaś alternatywa jak powinno to zachodzić, bo mam tak na prawde 3 klasy i muszę pod koniec sprawdzać czy nie kolidują ze sobą (wszystkie 3) i sprawdzać jak daleko są od siebie( tylko 2 ), a problematyczne jest załatwienie tego w tych klasach. Jakieś rady ? Dotychczas słyszałem raczej o podziale na pliki nagłówkowe i źródłowe przy klasach, ale czy tak samo to można robić tylko z np porównywaniem atrybutów kilku klas i nie będzie to błędne?

3

Zacznijmy od tego, że klasy nie powinny nazywać się Class1 i Class2, ale załóżmy na potrzeby tego posta, że są to nazwy przykładowe.

Powinieneś w tej chwili mieć:

  • class1.h
  • class1.cpp
  • class2.h
  • class2.cpp
  • class3.h
  • class3.cpp
  • main.cpp

Jeśli piszesz program obiektowo, praktycznie wszystkie pliki (z wyjątkiem maina) powinny być parami .h i .cpp, po jednej klasie w każdej takiej parze, a w samym mainie powinno być jak najmniej kodu.
Powinieneś zatem mieć klasę lub klasy które robią w tej chwili większość tego, co masz w mainie.

0
Alky napisał(a):

bo mam tak na prawde 3 klasy i muszę pod koniec sprawdzać czy nie kolidują ze sobą (wszystkie 3) i sprawdzać jak daleko są od siebie( tylko 2 )

Co to znaczy, że klasy kolidują ze sobą oraz jak daleko są od siebie?

0

Nazwy klas są oczywiście inne ale zapisałem tylko przykładowo. Naturalnie są parami i wszystko się dzieje w nich, tylko pod koniec ( są to samochodziki) chcę sprawdzać czy objekt klasy CarRed nie koliduje, a więc czy nie zderza się z obkiektem CarBlue(red.getGlobalBounds().intersects(blue.getGlobalBounds)) i tutaj chciałem to zamknąć wstępnie w klasie CarBlue używając extern CarRed red; (error) a, że objekt blue kontrolowany jest przez prote AI to musze też sprawdzać i porónywać pozycje objektów red i blue, znajdujących się w innych klasach. No i potrzebuje dostępu do obu klas. Obie dzedziczą z jednej klasy Car więc nie chce np do CarBlue includować CarRed żeby nie było jakichś problemó bo mają niektóre metody i zmienne o tych samych nazwach. I stąd moje pytanie, czy dobrym pomysłem jest załątwienie tego i innym pliku zawierającym obie klasy i wykonującym tylko funkcje ? Nawet jeśli zapropomujecie jakieś inne rozwiązanie to tak na przyszłość, jest to jakiś pomysł, żeby stworzyć plik .h i .cpp bez żadnych definicji klas, tylko zawierającym nagłówki i definicje funkcji ?

2

Czy CarRed i CarBlue czymkolwiek się różnią, poza nazwą i kolorem, cokolwiek to oznacza?
Bo może wystarczy ci jedna klasa. A jeśli się różnią, to pewnie przyda się dziedziczenie.

0

Różnią się. Obie klasy dziedziczą z Car. Niektóre metdy nazywająsie tak samo, ale działąją inaczej, co rozwiązałem polimorfizemem ( w Car jest czysta metoda wirtualna).

0

Ale nie odpowiedziałeś mi na pytanie. Jest to dobry sposób na takie porównanie "rzeczy" z 2 klas? Mówię tu o tym pliku który będzie includował te obie kalsy i porównywał konkretne rzeczy, a gotową funkcje bym wrzucił do maina.

0

To jak ? Nie chce sobie po prostu wyrobićzłego nawyku. Może powinno się takie rzeczy inaczej rozwiązywać.

0

Łatwiej by było gdybyś zrobił „jakoś” - tak żeby działało, pokazał, to doradzimy co zmienić a co zostawić.

0

Okej, postaram się to zaraz zrobić i podesłać

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