PDA

View Full Version : [c++] Suddividere due classi su piú file


stdecden
03-08-2007, 17:40
Salve a tutti!

Sto facendo un po'di tentativi con c++ e ho scritto le seguenti classi:


class cLevel
{
private:
bool Data[5][5]; //Mappa delle collisioni
class cPlayer //Classe Player
{
private:
int x; //Posizione x del giocatore
int y; //Posizione y del giocatore
cLevel *Level; //Istanza di cLevel, dove poter accedere ai suoi metodi
public:
cPlayer(cLevel *_Level); //Costruttore della classe che richiede un puntatore a level
void MoveRight(void); //Muove il player a destra se non ci sono collisioni, usando il metodo di cLevel per intercettare collisioni
friend class cLevel; //Consente a cLevel di accedere alle proprietá x e y per poter disegnare il livello
};
cPlayer *Player; //Istanza di cPlayer contenuta in cLevel
public:
cLevel(void); //Costruttore di clevel, dove viene inizializzato Data e Player
bool Collide(int x,int y); //Ritorna true se la posizione (x|y) sulla mappa corissponde a collisione
void UpdatePlayer(void); //Muove il player a destra
void Draw(void); //Disegna il livello e il player sullo schermo
};

Volevo chiedervi se c'é un metodo piú elegante, o piú funzionale di scrivere queste classi. E soprattutto come fare a suddividere queste classi su piú file(in caso di progetti piú grandi)

vizzz
03-08-2007, 18:53
class cPlayer //Classe Player
{
private:
int x; //Posizione x del giocatore
int y; //Posizione y del giocatore
cLevel *Level; //Istanza di cLevel, dove poter accedere ai suoi metodi
public:
cPlayer(cLevel *_Level); //Costruttore della classe che richiede un puntatore a level
void MoveRight(void); //Muove il player a destra se non ci sono collisioni, usando il metodo di cLevel per intercettare collisioni
friend class cLevel; //Consente a cLevel di accedere alle proprietá x e y per poter disegnare il livello
};

class cLevel
{
private:
bool Data[5][5]; //Mappa delle collisioni

cPlayer *Player; //Istanza di cPlayer contenuta in cLevel
public:
cLevel(void); //Costruttore di clevel, dove viene inizializzato Data e Player
bool Collide(int x,int y); //Ritorna true se la posizione (x|y) sulla mappa corissponde a collisione
void UpdatePlayer(void); //Muove il player a destra
void Draw(void); //Disegna il livello e il player sullo schermo
};

le due classi puoi anche tenerle su file separate a patto di fare le necessarie inclusioni.

stdecden
03-08-2007, 18:55
Ma cosí non mi dá problemi a definire friend una classe non ancora definita?

cionci
03-08-2007, 21:18
Perché usare friend ?!?!? Solo per poter cambiare x e y ? Non bastano due metodi per spostare x e y ?

stdecden
03-08-2007, 22:12
void MoveRight(void); //Muove il player a destra se non ci sono collisioni, usando il metodo di cLevel per intercettare collisioni


Sí, ma il problema é un altro. La classe, com'era riusciva a intercettare collisioni direttamente dalla classe cLevel, in pratica usare il metodo cLevel::Collide(int x,int y);
Invece se separo le due classi non riesco piú ad accedere a questo metodo

EDIT:

Grazie delle vostre risposte, comunque ho risolto con una dichiarazione anticipata!