C++ : Comment utiliser une classe dans une classe ??

C++ : Comment utiliser une classe dans une classe ?? - Programmation

Marsh Posté le 08-08-2001 à 14:31:38    

Exemple de mon prog :
 
class alien {
 
} avec un constructeur
 
class alien_pool
{
        alien *pool = new alien[200];
}
 
Marche po ... Dans le main oui, mais pas dans la classe alien pool ... Comment je fais alors ??

 

[edtdd]--Message édité par bfg--[/edtdd]

Reply

Marsh Posté le 08-08-2001 à 14:31:38   

Reply

Marsh Posté le 08-08-2001 à 14:35:33    

on fait pas d'alloc dans une classe. dans une fonctions de la classe oui

Reply

Marsh Posté le 08-08-2001 à 14:37:32    

Okey !! Donc je déclare ma variable, et je l'instancie et l'initialise dans un constructeur par exemple ?

Reply

Marsh Posté le 08-08-2001 à 14:38:44    

par ex
oublie pas de l'instancier :D  :pt1cable:

Reply

Marsh Posté le 08-08-2001 à 14:41:17    

Merci !! Ca marche !! Enfin, à la compilation ! Ca fait 3 ans que j'ai plus fait de C ... Et la j'attaque direct le C++ ... Chaud !
 
Encore merci !  :jap:

Reply

Marsh Posté le 08-08-2001 à 14:45:06    

Si tu utilises la méthode de TheJackal n'oublies pas de faire un delete dans le descruteur.
 
Sinon tu peux faire ça et la dectruction est automatique:
 
 
class alien {  
 
};  
 
class alien_pool  
{  
       alien pool[200];  
};

Reply

Marsh Posté le 08-08-2001 à 14:45:45    

de rien. tu vera le c++ est super
qu'est ce ke t'appelle instancier au faite  :D?

Reply

Marsh Posté le 08-08-2001 à 14:46:32    

seblamb a écrit a écrit :

Si tu utilises la méthode de TheJackal n'oublies pas de faire un delete dans le descruteur.
 
Sinon tu peux faire ça et la dectruction est automatique:
 
 
class alien {  
 
};  
 
class alien_pool  
{  
       alien pool[200];  
};  




 
c vrai aussi

Reply

Marsh Posté le 08-08-2001 à 14:50:32    

TheJackal a écrit a écrit :

de rien. tu vera le c++ est super
qu'est ce ke t'appelle instancier au faite  :D?  




 
Ou là, je me mélange les pinceaux avec les termes ... Ben pour moi instancier c'est par exemple :
 
void main()
{
alien_pool p = new alien_pool;
}
 
ce qui après merde quand je fais :
 
p.create_alien(); ... Pace que Mosieur veut un pointeur ... J'y perd mon latin, j'en avais fais en cous ya quelques année, ça m'avais parru plus simple ...

Reply

Marsh Posté le 08-08-2001 à 14:53:07    

Voici mon code de test :
 
#include "allegro.h"
 
#define VIVANT 1
#define MORT 0
#define TIR 2
#define EXPLOSION 3
#define FAUX 0
#define VRAI 1
 
class alien {
public :
 
  int etat;     // VIVANT,EXPLOSION,MORT,TIR
  int pos_x;     //
  int pos_y;     // Position x et y sur l'écran
  int cadence_tir;   // Vitesse de tir
  int cadence_tir_compteur; // Décompte pour le prochain tir
  int type_tir;    // Type du tir
  int taille_x;    //
  int taille_y;    // Taille en largeur(x), hauteur(y)
  int zone_de_touche_x1;  //
  int zone_de_touche_x2;  //
  int zone_de_touche_y1;  //
  int zone_de_touche_y2;  // Zone de collision avec un objet
  int weak_point_x1;   //
  int weak_point_x2;   //
  int weak_point_y1;   //
  int weak_point_y2;   // Zone de collision point faible avec un objet
  int animation_normale[50]; // Tableau d'animation pour mouvement classique
  int animation_attaque[50]; // Tableau d'animation lorsque tir
  int animation_explosion[50];// Tableau d'animation lorsque explosion
  int pv;      // Point de vie
  int mouvement;    // Type de mouvement
 
  void init(int vpos_x,int vpos_y,int vcadence_tir,int vtype_tir,int vpv,int vmouvement);
         // Initialise l'alien avec les données en paramètre
  void set_zone_de_touche(int x1,int y1,int x2,int y2);
         // Initialise la zone de touche
  void set_weak_point(int x1,int y1,int x2,int y2);
         // Initialise le point faible
  void set_animation_normale(int index,int valeur);
         // Initialise une image de l'animation normale
  void set_animation_attaque(int index,int valeur);
         // Initialise une image de l'animation attaque
  void set_animation_explosion(int index,int valeur);
         // Initialise une image de l'animation explosion
  void shoot();    // Fait tirer l'alien
  void hit();     // Enlève un point de vie OU fait exploser l'alien
  void die();     // Fait mourir l'alien
  void move();    // Bouge l'alien selon le mouvement/etat ...
  int iscollide_zone_de_touche(int sx1,int sy1,int sx2,int sy2);
         // Est-il en collision (par rapport aux paramêtres)
  int iscollide_weak_point(int sx1,int sy1,int sx2,int sy2);
         // Est-il en collision (par rapport aux paramêtres)
  void update();    // Gère la vie de l'alien avec les méthodes du dessus
  alien() { etat=MORT;}; // Constructeur
};
 
 void alien::init(int vpos_x,int vpos_y,int vcadence_tir,int vtype_tir,int vpv,int vmouvement) {
   pos_x = vpos_x;
   pos_y = vpos_y;
   cadence_tir = vcadence_tir;
   cadence_tir_compteur = cadence_tir;
   type_tir = vtype_tir;
   pv = vpv;
   mouvement = vmouvement;
 };
 
 void alien::set_zone_de_touche(int x1,int y1,int x2,int y2) {
  zone_de_touche_x1 = x1;
  zone_de_touche_y1 = y1;
  zone_de_touche_x2 = x2;
  zone_de_touche_y2 = y2;
 };
 
 void alien::set_weak_point(int x1,int y1,int x2,int y2) {
  weak_point_x1 = x1;
  weak_point_y1 = y1;
  weak_point_x2 = x2;
  weak_point_y2 = y2;
 };
 
 void alien::set_animation_normale(int index,int valeur){
  animation_normale[index] = valeur;
 };
 
 void alien::set_animation_attaque(int index,int valeur){
  animation_attaque[index] = valeur;
 };
 
 void alien::set_animation_explosion(int index,int valeur){
  animation_explosion[index] = valeur;
 };
 
 void alien::shoot(){
  etat = TIR;
 };
 
 void alien::hit(){
  pv--;
  if (pv<=0)
   etat = EXPLOSION;
 };
 
 void alien::die(){
  etat = MORT;
 };
 
 void alien::move(){
  if (mouvement==0)
   pos_x--; // Mouvement simple de base
 };
 
 int alien::iscollide_zone_de_touche(int sx1,int sy1,int sx2,int sy2){
  return FAUX;
 };
 
 int alien::iscollide_weak_point(int sx1,int sy1,int sx2,int sy2){
  return FAUX;
 };
 
 void alien::update(){
  if (etat==TIR) etat=VIVANT;
   
  if (etat==VIVANT) {
 
   cadence_tir_compteur--;
   
   if (cadence_tir_compteur<=0) {
    shoot();
    cadence_tir_compteur = cadence_tir;
   }
 
   move();  
  }
 };
 
 
 class alien_pool {
 public:
  alien pool[200];  
 
  void create_alien();
  int etat_alien(int nalien);
 };
 
 void alien_pool::create_alien(){
  pool[0].etat = VIVANT;
 };
 
 int alien_pool::etat_alien(int nalien){
  return pool[nalien].etat;
 }
 
int main()
{
 alien_pool p = new alien_pool;
 
 p.create_alien();
 
   /* you should always do this at the start of Allegro programs */
   allegro_init();
 
   /* set up the keyboard handler */
   install_keyboard();  
 
   /* set a graphics mode sized 320x200 */
   if (set_gfx_mode(GFX_DIRECTX_WIN, 640, 480, 0, 0) != 0) {
      set_gfx_mode(GFX_TEXT, 0, 0, 0, 0);
      allegro_message("Unable to set any graphic mode\n%s\n", allegro_error);
      return 1;
   }
 
   /* set the color palette */
   set_palette(desktop_palette);
 
   /* clear the screen to white */
   clear_to_color(screen, makecol(255, 255, 255));
 
   /* you don't need to do this, but on some platforms (eg. Windows) things
    * will be drawn more quickly if you always acquire the screen before
    * trying to draw onto it.
    */
   acquire_screen();
 
   /* set transparent text */
   text_mode(-1);
 
   /* write some text to the screen with black letters */
   if (p.etat_alien(0)==VIVANT)  
 textout_centre(screen, font, "VIVANT", SCREEN_W/2, SCREEN_H/2, makecol(0,0,0));
   
   if (p.etat_alien(0)==MORT)  
 textout_centre(screen, font, "MORT", SCREEN_W/2, SCREEN_H/2, makecol(0,0,0));
 
   /* you must always release bitmaps before calling any input functions */
   release_screen();
 
   /* wait for a keypress */
   readkey();
 
   return 0;
}
 
END_OF_MAIN();
 
Il merde ...
Vous pourriez me diriger un peu pour que je prenne des bonnes bases ...

Reply

Marsh Posté le 08-08-2001 à 14:53:07   

Reply

Marsh Posté le 08-08-2001 à 14:58:12    

alien_pool *p = new alien_pool;  
 
p->create_alien();  
 
new aloue de la mem pour un pointeur et non une var normal

Reply

Marsh Posté le 08-08-2001 à 15:00:54    

Purée !! Qu'est ce que je suis con !!
 
Je faisais p--> au lieu de p-> !!
 
raaaa !! Bon ça devrait aller !!
 
ENCORE MERCI BEAUCOUP POUR TOUT !!
 
A si, dernière question mon alien pool[200]; la mémoire est alloué ??

Reply

Marsh Posté le 08-08-2001 à 15:02:45    

?
la meme mem est toujours aloc
seulement comme ta fait l'alloc / desalloc se fait tout seul
ya ke new qui doit etre suivit de delete

Reply

Marsh Posté le 08-08-2001 à 15:05:28    

Okey ! Bon, ça marche ! Je continue le dev, les choses se remettent en place dans ma ch'tite caboche !!
 
MERCI !
 
 :hello:

Reply

Marsh Posté le 08-08-2001 à 15:07:59    

jsuis curieux mais tu fait koi? et avec koi?

Reply

Marsh Posté le 08-08-2001 à 15:13:53    

TheJackal a écrit a écrit :

jsuis curieux mais tu fait koi? et avec koi?  




 
Alors, je tente le développement d'un shoot'em up à scrolling horizontal avec MS VC++ et allegro (utilisant Direct X) ...
 
Pour l'instant, je cherche des structures de données cohérentes, et me remémore mon C++  ...  :pt1cable:  :pt1cable:

Reply

Marsh Posté le 08-08-2001 à 15:17:20    

bonne chance et surtout n'hesite pas a revenir si ta un blem

Reply

Marsh Posté le 08-08-2001 à 15:18:41    

Okey ! Thxs !

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed