Autor Wątek: [C++]Wymiana zmiennymi między klasami. Czy ten sposób jest dobry?  (Przeczytany 2477 razy)

Offline DarkPeter

  • Użytkownik

# Grudzień 07, 2011, 18:53:29
Witam,
mam pewną klasę nazwaną zmienne.cpp. Są w niej wszystkie publiczne zmienne potrzebne do funkcjonowania mojej gierki. Zrobiłem to po to, żeby wszystkie te zmienne były w jednym miejscu.
Nie jestem jeszcze doświadczony w programowaniu w C++, więc mam wątpliwości co do poprawności mojego sposobu na wymianę tych zmiennych między klasami.
Robię to mniej więcej tak:
include na początku każdej klasy:
#include "..\zmienne.cpp"zainicjowanie potrzebnych zmiennych w klasie: (występuje to zaraz po includach)
float zmienne::playerX;
float zmienne::playerY;
float zmienne::playerZ;
I właśnie z tym powyżej mam problem. Ponieważ nie podoba mi się to ,że muszę zawsze raz jeszcze jakby wczytywać te zmienne. Jeżeli czegoś takiego nie zrobię, to pojawi mi się błąd w stylu:
Cytuj
obj\Debug\src\LoadOBJModels.o:M:\C++ projekty\PGameFINAL\src\LoadOBJModels.cpp|60|undefined reference to `zmienne::model'|
Czy ten sposób jest poprawny, czy rzeczywiście moje podejrzenia są słuszne: coś tu jest nie tak?
Pozdrawiam!

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline Oti

  • Użytkownik

# Grudzień 07, 2011, 18:55:16
Wyraźnie widać, że nie wiesz co to klasa.

Offline Xender

  • Użytkownik

# Grudzień 07, 2011, 20:43:00
Brawo, GENIALNY pomysł! Zamiast luźnych, niezwiązanych ze sobą zmiennych globalnych masz zestaw luźnych, niezwiązanych ze sobą zmiennych w jednym miejscu, przez co robi się jeszcze większy burdel. Zrezygnuj z tego pomysłu i dowiedz się jak korzystać z klas, bo masz coś prawie jak zmienne statyczne, tyle że pewnie nie są zadeklarowane w klasie.

Offline xiva

  • Użytkownik

# Grudzień 07, 2011, 20:52:28
jesteś pewien że wiesz co to jest klasa? :)

poza tym to co zrobiłeś zmienne::playerX; podpada pod przestrzeń nazw :)

zmienne.cpp to zwykły plik dodany do projektu. klasa to 'zbiornik' na obiekty funkcje itp

np.
class moja_klasa {

public:
int zm1;

private:
int zm2;
};
zmienne z klasy wywołujesz najpierw przez przypisanie klasy do obiektu a następnie w ten sposób:
obiekt_klasy.moja_klasa;

« Ostatnia zmiana: Grudzień 07, 2011, 20:54:09 wysłana przez xiva »

Offline ctrl_home

  • Użytkownik

# Grudzień 07, 2011, 21:14:05
W klasie powinno się przechowywać zmienne i funkcje, które są ze sobą logicznie związane. Pamiętaj że z klasy później tworzysz obiekt, który powinien reprezentować coś konkretnego a nie zlepek nie związanych ze sobą funkcji i zmiennych. Prosty przykład
class CSamochod
{
private:
  int m_rokProdukcji;
  int m_pojemnoscSilnika;
  ..
public:
  void Ruszaj();
  void Stoj();
  ...
}


Offline izaw

  • Użytkownik

# Grudzień 07, 2011, 22:49:27
@DarkPeter

Jak źle działa proteza (zmienne globalne), to dodajmy plaster.

Przemyśl konstrukcję programu. Każda zmienna jest potrzebna w konkretnej klasie i tam ma być. Ewentualnie jej wartość może być udostępniona jako argument funkcji.

Zdajesz sobie sprawę, że istnieją języki bez zmiennych globalnych?

Offline ShadowDancer

  • Redaktor

# Grudzień 07, 2011, 23:00:24
DarkPeter:
Generalnie zmienne globalne to nie jest coś złego, jednak z tego co widzę, to próbujesz upchnąć gdzieś właściwości jakiegoś obiektu (player). Powinieneś zrobić obiekt player (globalny lub nie - zależy co to będzie) i w nim upchnąć te zmienne. Robienie klasy jako kontenera na zmienne jest bezcelowe.

PS. Dołączamy zwykle pliki .hpp (.h), a nie .cpp
« Ostatnia zmiana: Grudzień 08, 2011, 09:43:59 wysłana przez ShadowDancer »