Uporządkowanie klas w kodzie

0

Cześć wszystkim, ostatnio kodowałem większy projekt niż ostatnie, w kodzie mam 3 klasy. Postanowiłem stworzyć osobny plik nagłówkowy header oraz cpp z ciałami klas, w jednej z klas mam voida który używa zmiennej globalnej, ms visual studio wskazuje na błąd ponieważ zmienna globalna jest nieznana w pliku cpp z ciałami klas. Co radzicie ? Mogę zainicjować tą zmienną w cpp z ciałami klas ? Czy lepiej pozbyć się zmiennej globalnej ?

8

Nie rozumiem stwierdzenia "mam voida", ale jeśli chodzi o zmienne globalne to ich nazwy powinny zaczynać się od //. Inaczej mówiąc: nie powinno ich być.

0

W każdej z klas jest void używający zmiennej globalnej. Czyli zmienne globalne w klasach to niezbyt dobry nawyk ?

3

Zmienne globalne, to w ogóle zły nawyk, nie tylko w klasach ;-)

Czy w stwierdzeniu klasa ma voida masz na myśli, że klasa ma metodę, która niczego nie zwraca? Poza tym nic niewiemy o tych klasach, jak również dlaczego te trzy klasy powiązane są tą jedną zmienną globalną?

0

@Sparrow-hawk: zmienna globalna to dwuwymiarowa tablica która ma pełnić rolę planszy. Klasy to rodzaje statków, 1-masztowiec, 2-masztowiec itd. Wyżej wspomniany void używający zmiennej globalnej ma za zadanie przyporządkować koordynaty na planszy do obiektu. Chyba wiem gdzie leży błąd, zamiast zmiennej globalnej oraz tego nieszczęsnego voida powinienem dać możliwość nadania koordynatów poprzez wywołanie przeciążonego konstruktora. Poprawnie rozumuje ? Dzięki za poświęcony czas :)

4

Dlaczego te statki, to 3 oddzielne klasy? Jeśli różnią się tylko ilością masztów (polem powierzchni), to raczej powinny być obiektami 1 klasy.

Czy jesteś pewien, że to statki potrzebują przechowywać kordynaty? Może, zamiast tablicy globalnej utwórz klasę, która będzie tworzyć planszę do gry, umieszczać na niej statki, i przechowywać ich współrzędne?

0

@Sparrow-hawk: Pisząc void miałem na myśli metodę która niczego nie zwraca, masz na myśli stworzenie klasy a w niej dwuwymiarowej tablicy ? Czy całkiem odpuścić sobie tą tablice i zrobić to w inny sposób ?

1

Chodzi o to że z tego co piszesz wynika że tworzysz klasy obiektów które niewiele lub w niczym się od siebie nie różnią, a w takim przypadku powinny być to obiekty jednej klasy różniące się jedynie wartościami pól lub jeśli różnice są głębsze tworzysz nadrzędną klasę z wspólnymi metodami po której dziedziczą już poszczególne klasy okrętów.

1

@i20918: Tak, wiem to już usprawniłem, dzięki wielkie.

2

Jeśli masz zdefiniowaną zmienną globalną w pliku cpp, to w innym pliku, w którym chces jej użyć, musisz zadeklarować ją ze słowem kluczowym extern - wtedy będzie widoczna. Ale tak nie rób.
Lepszym pomysłem jest stworzyć klasę np. World, Map (albo o innej nazwie - chodzi o ideę), która będzie miała taką właśnie tablicę zdefiniowaną w swoim ciele oraz będzie zarządzać obiektami statków. Wówczas mógłbyś wszystko robić za pomocą jednego interfejsu wystawionego przez tę klasę.

0
Skromny Szewc napisał(a):

Jeśli masz zdefiniowaną zmienną globalną w pliku cpp, to w innym pliku, w którym chces jej użyć, musisz zadeklarować ją ze słowem kluczowym extern - wtedy będzie widoczna. Ale tak nie rób.
Lepszym pomysłem jest stworzyć klasę np. World, Map (albo o innej nazwie - chodzi o ideę), która będzie miała taką właśnie tablicę zdefiniowaną w swoim ciele oraz będzie zarządzać obiektami statków. Wówczas mógłbyś wszystko robić za pomocą jednego interfejsu wystawionego przez tę klasę.

Wielki dzięki za pomoc, tak właśnie zrobiłem. Wiem już wszystko czego potrzebowałem, temat do zamknięcia. Jeszcze raz dzięki wszystkim za czas.

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